use super::Cast;
#[test]
fn saturating_cast() {
assert_eq!(Cast(256_i32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(255_i32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(257_i32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(511_i32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(512_i32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(-1_i32).saturating_cast_to_u8(), 0_u8); assert_eq!(Cast(-256_i32).saturating_cast_to_u8(), 0_u8); assert_eq!(Cast(-257_i32).saturating_cast_to_u8(), 0_u8); assert_eq!(Cast(i32::MAX).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(i32::MIN).saturating_cast_to_u8(), 0_u8); assert_eq!(Cast(128_i32).saturating_cast_to_u8(), 128_u8); assert_eq!(Cast(127_i32).saturating_cast_to_u8(), 127_u8);
assert_eq!(Cast(127_i32).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(128_i32).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(255_i32).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(256_i32).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(-129_i32).saturating_cast_to_i8(), -128_i8); assert_eq!(Cast(i32::MAX).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(i32::MIN).saturating_cast_to_i8(), -128_i8);
assert_eq!(Cast(i32::MAX as u32).saturating_cast_to_i32(), i32::MAX);
assert_eq!(Cast(i32::MAX as u32 + 1).saturating_cast_to_i32(), i32::MAX); assert_eq!(Cast(u32::MAX).saturating_cast_to_i32(), i32::MAX);
assert_eq!(Cast(255_u32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(256_u32).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(u32::MAX).saturating_cast_to_u8(), 255_u8);
assert_eq!(Cast(100_i32).saturating_cast_to_u32(), 100_u32); assert_eq!(Cast(-1_i32).saturating_cast_to_u32(), 0_u32); assert_eq!(Cast(i32::MIN).saturating_cast_to_u32(), 0_u32); assert_eq!(Cast(i32::MAX).saturating_cast_to_u32(), i32::MAX as u32);
assert_eq!(Cast(255_u8).saturating_cast_to_i32(), 255_i32); assert_eq!(Cast(0_u8).saturating_cast_to_i32(), 0_i32);
assert_eq!(Cast(127_u8).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(128_u8).saturating_cast_to_i8(), 127_i8); assert_eq!(Cast(255_u8).saturating_cast_to_i8(), 127_i8);
assert_eq!(Cast(0_i32).saturating_cast_to_u8(), 0_u8);
assert_eq!(Cast(0_u8).saturating_cast_to_i32(), 0_i32);
assert_eq!(Cast(0_i32).saturating_cast_to_i8(), 0_i8);
assert_eq!(Cast(i64::MAX).saturating_cast_to_u8(), 255_u8); assert_eq!(Cast(i64::MIN).saturating_cast_to_u8(), 0_u8); assert_eq!(Cast(u64::MAX).saturating_cast_to_i8(), 127_i8);
assert_eq!(Cast(42_i32).saturating_cast_to_u8(), 42_u8);
assert_eq!(Cast(100_u32).saturating_cast_to_i32(), 100_i32);
assert_eq!(Cast(50_i16).saturating_cast_to_u16(), 50_u16);
assert_eq!(Cast(-5_i32).saturating_cast_to_u16(), 0_u16);
assert_eq!(Cast(-100_i64).saturating_cast_to_u32(), 0_u32);
}
#[test]
fn wrapping_cast() {
assert_eq!(Cast(256_i32).wrapping_cast_to_u8(), 0_u8); assert_eq!(Cast(255_i32).wrapping_cast_to_u8(), 255_u8); assert_eq!(Cast(257_i32).wrapping_cast_to_u8(), 1_u8); assert_eq!(Cast(511_i32).wrapping_cast_to_u8(), 255_u8); assert_eq!(Cast(512_i32).wrapping_cast_to_u8(), 0_u8); assert_eq!(Cast(-1_i32).wrapping_cast_to_u8(), 255_u8); assert_eq!(Cast(-256_i32).wrapping_cast_to_u8(), 0_u8); assert_eq!(Cast(-257_i32).wrapping_cast_to_u8(), 255_u8); assert_eq!(Cast(i32::MAX).wrapping_cast_to_u8(), 255_u8); assert_eq!(Cast(i32::MIN).wrapping_cast_to_u8(), 0_u8); assert_eq!(Cast(128_i32).wrapping_cast_to_u8(), 128_u8); assert_eq!(Cast(127_i32).wrapping_cast_to_u8(), 127_u8);
assert_eq!(Cast(127_i32).wrapping_cast_to_i8(), 127_i8); assert_eq!(Cast(128_i32).wrapping_cast_to_i8(), -128_i8); assert_eq!(Cast(255_i32).wrapping_cast_to_i8(), -1_i8); assert_eq!(Cast(256_i32).wrapping_cast_to_i8(), 0_i8); assert_eq!(Cast(-129_i32).wrapping_cast_to_i8(), 127_i8); assert_eq!(Cast(i32::MAX).wrapping_cast_to_i8(), -1_i8);
assert_eq!(Cast(i32::MAX as u32).wrapping_cast_to_i32(), i32::MAX);
assert_eq!(Cast(i32::MAX as u32 + 1).wrapping_cast_to_i32(), i32::MIN);
assert_eq!(Cast(u32::MAX).wrapping_cast_to_i32(), -1_i32);
assert_eq!(Cast(255_u32).wrapping_cast_to_u8(), 255_u8); assert_eq!(Cast(256_u32).wrapping_cast_to_u8(), 0_u8); assert_eq!(Cast(u32::MAX).wrapping_cast_to_u8(), 255_u8);
assert_eq!(Cast(100_i32).wrapping_cast_to_u32(), 100_u32); assert_eq!(Cast(-1_i32).wrapping_cast_to_u32(), u32::MAX); assert_eq!(Cast(i32::MIN).wrapping_cast_to_u32(), 2147483648_u32);
assert_eq!(Cast(255_u8).wrapping_cast_to_i32(), 255_i32); assert_eq!(Cast(0_u8).wrapping_cast_to_i32(), 0_i32);
assert_eq!(Cast(127_u8).wrapping_cast_to_i8(), 127_i8); assert_eq!(Cast(128_u8).wrapping_cast_to_i8(), -128_i8); assert_eq!(Cast(255_u8).wrapping_cast_to_i8(), -1_i8);
assert_eq!(Cast(0_i32).wrapping_cast_to_u8(), 0_u8);
assert_eq!(Cast(0_u8).wrapping_cast_to_i32(), 0_i32);
assert_eq!(Cast(0_i32).wrapping_cast_to_i8(), 0_i8);
assert_eq!(Cast(i64::MAX).wrapping_cast_to_u8(), 255_u8);
assert_eq!(Cast(i64::MIN).wrapping_cast_to_u8(), 0_u8);
assert_eq!(Cast(u64::MAX).wrapping_cast_to_i8(), -1_i8);
}
#[test]
fn split_join_le() {
let v = u16::MAX / 2;
let split = Cast(v).into_u8_le();
assert_eq![v, Cast::<u16>::from_u8_le(split)];
let v = u32::MAX / 2;
let split = Cast(v).into_u16_le();
assert_eq![v, Cast::<u32>::from_u16_le(split)];
let split = Cast(v).into_u8_le();
assert_eq![v, Cast::<u32>::from_u8_le(split)];
let v = u64::MAX / 2;
let split = Cast(v).into_u32_le();
assert_eq![v, Cast::<u64>::from_u32_le(split)];
let split = Cast(v).into_u16_le();
assert_eq![v, Cast::<u64>::from_u16_le(split)];
let split = Cast(v).into_u8_le();
assert_eq![v, Cast::<u64>::from_u8_le(split)];
let v = u128::MAX / 2;
let split = Cast(v).into_u64_le();
assert_eq![v, Cast::<u128>::from_u64_le(split)];
let split = Cast(v).into_u32_le();
assert_eq![v, Cast::<u128>::from_u32_le(split)];
let split = Cast(v).into_u16_le();
assert_eq![v, Cast::<u128>::from_u16_le(split)];
let split = Cast(v).into_u8_le();
assert_eq![v, Cast::<u128>::from_u8_le(split)];
}
#[test]
fn split_join_be() {
let v = u16::MAX / 2;
let split = Cast(v).into_u8_be();
assert_eq![v, Cast::<u16>::from_u8_be(split)];
let v = u32::MAX / 2;
let split = Cast(v).into_u16_be();
assert_eq![v, Cast::<u32>::from_u16_be(split)];
let split = Cast(v).into_u8_be();
assert_eq![v, Cast::<u32>::from_u8_be(split)];
let v = u64::MAX / 2;
let split = Cast(v).into_u32_be();
assert_eq![v, Cast::<u64>::from_u32_be(split)];
let split = Cast(v).into_u16_be();
assert_eq![v, Cast::<u64>::from_u16_be(split)];
let split = Cast(v).into_u8_be();
assert_eq![v, Cast::<u64>::from_u8_be(split)];
let v = u128::MAX / 2;
let split = Cast(v).into_u64_be();
assert_eq![v, Cast::<u128>::from_u64_be(split)];
let split = Cast(v).into_u32_be();
assert_eq![v, Cast::<u128>::from_u32_be(split)];
let split = Cast(v).into_u16_be();
assert_eq![v, Cast::<u128>::from_u16_be(split)];
let split = Cast(v).into_u8_be();
assert_eq![v, Cast::<u128>::from_u8_be(split)];
}