Auto merge of #50554 - clarcharr:from_bool, r=TimNN

Add From<bool> for int types

Fixes #46109.
This commit is contained in:
bors 2018-06-02 07:50:10 +00:00
commit 2954cb5119
3 changed files with 39 additions and 2 deletions

View File

@ -4454,6 +4454,20 @@ macro_rules! impl_from {
}
}
// Bool -> Any
impl_from! { bool, u8, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, u16, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, u32, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, u64, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, u128, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, usize, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, i8, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, i16, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, i32, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, i64, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, i128, #[stable(feature = "from_bool", since = "1.28.0")] }
impl_from! { bool, isize, #[stable(feature = "from_bool", since = "1.28.0")] }
// Unsigned -> Unsigned
impl_from! { u8, u16, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }
impl_from! { u8, u32, #[stable(feature = "lossless_int_conv", since = "1.5.0")] }

View File

@ -134,6 +134,15 @@ fn test_infallible_try_from_int_error() {
}
macro_rules! test_impl_from {
($fn_name:ident, bool, $target: ty) => {
#[test]
fn $fn_name() {
let one: $target = 1;
let zero: $target = 0;
assert_eq!(one, <$target>::from(true));
assert_eq!(zero, <$target>::from(false));
}
};
($fn_name: ident, $Small: ty, $Large: ty) => {
#[test]
fn $fn_name() {
@ -173,6 +182,18 @@ test_impl_from! { test_u16i32, u16, i32 }
test_impl_from! { test_u16i64, u16, i64 }
test_impl_from! { test_u32i64, u32, i64 }
// Bool -> Integer
test_impl_from! { test_boolu8, bool, u8 }
test_impl_from! { test_boolu16, bool, u16 }
test_impl_from! { test_boolu32, bool, u32 }
test_impl_from! { test_boolu64, bool, u64 }
test_impl_from! { test_boolu128, bool, u128 }
test_impl_from! { test_booli8, bool, i8 }
test_impl_from! { test_booli16, bool, i16 }
test_impl_from! { test_booli32, bool, i32 }
test_impl_from! { test_booli64, bool, i64 }
test_impl_from! { test_booli128, bool, i128 }
// Signed -> Float
test_impl_from! { test_i8f32, i8, f32 }
test_impl_from! { test_i8f64, i8, f64 }

View File

@ -220,13 +220,15 @@ fn test_try() {
assert_eq!(try_result_none(), None);
fn try_result_ok() -> Result<u8, u8> {
let val = Ok(1)?;
let result: Result<u8, u8> = Ok(1);
let val = result?;
Ok(val)
}
assert_eq!(try_result_ok(), Ok(1));
fn try_result_err() -> Result<u8, u8> {
let val = Err(1)?;
let result: Result<u8, u8> = Err(1);
let val = result?;
Ok(val)
}
assert_eq!(try_result_err(), Err(1));