Auto merge of #50554 - clarcharr:from_bool, r=TimNN
Add From<bool> for int types Fixes #46109.
This commit is contained in:
commit
2954cb5119
@ -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")] }
|
||||
|
@ -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 }
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user