2021-01-09 16:55:41 -06:00
|
|
|
use core::iter::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_steps_between() {
|
|
|
|
assert_eq!(Step::steps_between(&20_u8, &200_u8), Some(180_usize));
|
|
|
|
assert_eq!(Step::steps_between(&-20_i8, &80_i8), Some(100_usize));
|
|
|
|
assert_eq!(Step::steps_between(&-120_i8, &80_i8), Some(200_usize));
|
|
|
|
assert_eq!(Step::steps_between(&20_u32, &4_000_100_u32), Some(4_000_080_usize));
|
|
|
|
assert_eq!(Step::steps_between(&-20_i32, &80_i32), Some(100_usize));
|
|
|
|
assert_eq!(Step::steps_between(&-2_000_030_i32, &2_000_050_i32), Some(4_000_080_usize));
|
|
|
|
|
|
|
|
// Skip u64/i64 to avoid differences with 32-bit vs 64-bit platforms
|
|
|
|
|
|
|
|
assert_eq!(Step::steps_between(&20_u128, &200_u128), Some(180_usize));
|
|
|
|
assert_eq!(Step::steps_between(&-20_i128, &80_i128), Some(100_usize));
|
|
|
|
if cfg!(target_pointer_width = "64") {
|
|
|
|
assert_eq!(Step::steps_between(&10_u128, &0x1_0000_0000_0000_0009_u128), Some(usize::MAX));
|
|
|
|
}
|
|
|
|
assert_eq!(Step::steps_between(&10_u128, &0x1_0000_0000_0000_000a_u128), None);
|
|
|
|
assert_eq!(Step::steps_between(&10_i128, &0x1_0000_0000_0000_000a_i128), None);
|
|
|
|
assert_eq!(
|
|
|
|
Step::steps_between(&-0x1_0000_0000_0000_0000_i128, &0x1_0000_0000_0000_0000_i128,),
|
|
|
|
None,
|
|
|
|
);
|
|
|
|
}
|
2021-01-22 15:58:21 -06:00
|
|
|
|
2021-01-09 16:55:41 -06:00
|
|
|
#[test]
|
|
|
|
fn test_step_forward() {
|
|
|
|
assert_eq!(Step::forward_checked(55_u8, 200_usize), Some(255_u8));
|
|
|
|
assert_eq!(Step::forward_checked(252_u8, 200_usize), None);
|
|
|
|
assert_eq!(Step::forward_checked(0_u8, 256_usize), None);
|
|
|
|
assert_eq!(Step::forward_checked(-110_i8, 200_usize), Some(90_i8));
|
|
|
|
assert_eq!(Step::forward_checked(-110_i8, 248_usize), None);
|
|
|
|
assert_eq!(Step::forward_checked(-126_i8, 256_usize), None);
|
|
|
|
|
|
|
|
assert_eq!(Step::forward_checked(35_u16, 100_usize), Some(135_u16));
|
|
|
|
assert_eq!(Step::forward_checked(35_u16, 65500_usize), Some(u16::MAX));
|
|
|
|
assert_eq!(Step::forward_checked(36_u16, 65500_usize), None);
|
|
|
|
assert_eq!(Step::forward_checked(-110_i16, 200_usize), Some(90_i16));
|
|
|
|
assert_eq!(Step::forward_checked(-20_030_i16, 50_050_usize), Some(30_020_i16));
|
|
|
|
assert_eq!(Step::forward_checked(-10_i16, 40_000_usize), None);
|
|
|
|
assert_eq!(Step::forward_checked(-10_i16, 70_000_usize), None);
|
|
|
|
|
|
|
|
assert_eq!(Step::forward_checked(10_u128, 70_000_usize), Some(70_010_u128));
|
|
|
|
assert_eq!(Step::forward_checked(10_i128, 70_030_usize), Some(70_040_i128));
|
|
|
|
assert_eq!(
|
|
|
|
Step::forward_checked(0xffff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_u128, 0xff_usize),
|
|
|
|
Some(u128::MAX),
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
Step::forward_checked(0xffff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_u128, 0x100_usize),
|
|
|
|
None
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
Step::forward_checked(0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128, 0xff_usize),
|
|
|
|
Some(i128::MAX),
|
|
|
|
);
|
|
|
|
assert_eq!(
|
|
|
|
Step::forward_checked(0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128, 0x100_usize),
|
|
|
|
None
|
|
|
|
);
|
|
|
|
}
|
2021-01-22 15:58:21 -06:00
|
|
|
|
2021-01-09 16:55:41 -06:00
|
|
|
#[test]
|
|
|
|
fn test_step_backward() {
|
|
|
|
assert_eq!(Step::backward_checked(255_u8, 200_usize), Some(55_u8));
|
|
|
|
assert_eq!(Step::backward_checked(100_u8, 200_usize), None);
|
|
|
|
assert_eq!(Step::backward_checked(255_u8, 256_usize), None);
|
|
|
|
assert_eq!(Step::backward_checked(90_i8, 200_usize), Some(-110_i8));
|
|
|
|
assert_eq!(Step::backward_checked(110_i8, 248_usize), None);
|
|
|
|
assert_eq!(Step::backward_checked(127_i8, 256_usize), None);
|
|
|
|
|
|
|
|
assert_eq!(Step::backward_checked(135_u16, 100_usize), Some(35_u16));
|
|
|
|
assert_eq!(Step::backward_checked(u16::MAX, 65500_usize), Some(35_u16));
|
|
|
|
assert_eq!(Step::backward_checked(10_u16, 11_usize), None);
|
|
|
|
assert_eq!(Step::backward_checked(90_i16, 200_usize), Some(-110_i16));
|
|
|
|
assert_eq!(Step::backward_checked(30_020_i16, 50_050_usize), Some(-20_030_i16));
|
|
|
|
assert_eq!(Step::backward_checked(-10_i16, 40_000_usize), None);
|
|
|
|
assert_eq!(Step::backward_checked(-10_i16, 70_000_usize), None);
|
|
|
|
|
|
|
|
assert_eq!(Step::backward_checked(70_010_u128, 70_000_usize), Some(10_u128));
|
|
|
|
assert_eq!(Step::backward_checked(70_020_i128, 70_030_usize), Some(-10_i128));
|
|
|
|
assert_eq!(Step::backward_checked(10_u128, 7_usize), Some(3_u128));
|
|
|
|
assert_eq!(Step::backward_checked(10_u128, 11_usize), None);
|
|
|
|
assert_eq!(
|
|
|
|
Step::backward_checked(-0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128, 0x100_usize),
|
|
|
|
Some(i128::MIN)
|
|
|
|
);
|
|
|
|
}
|