|
9 | 9 | // except according to those terms.
|
10 | 10 |
|
11 | 11 | use core::iter::*;
|
12 |
| -use core::{i8, i16, isize}; |
13 |
| -use core::usize; |
| 12 | +use core::{i8, i16, isize, u16, usize, i128, u128}; |
14 | 13 |
|
15 | 14 | #[test]
|
16 | 15 | fn test_lt() {
|
@@ -1285,15 +1284,77 @@ fn test_chain_fold() {
|
1285 | 1284 |
|
1286 | 1285 | #[test]
|
1287 | 1286 | fn test_steps_between() {
|
| 1287 | + assert_eq!(Step::steps_between(&20_u8, &200_u8), Some(180_usize)); |
| 1288 | + assert_eq!(Step::steps_between(&-20_i8, &80_i8), Some(100_usize)); |
1288 | 1289 | assert_eq!(Step::steps_between(&-120_i8, &80_i8), Some(200_usize));
|
| 1290 | + |
| 1291 | + assert_eq!(Step::steps_between(&20_u16, &40_100_u16), Some(40_080_usize)); |
| 1292 | + assert_eq!(Step::steps_between(&-20_i16, &80_i16), Some(100_usize)); |
| 1293 | + assert_eq!(Step::steps_between(&-20_030_i16, &20_050_i16), Some(40_080_usize)); |
| 1294 | + |
| 1295 | + assert_eq!(Step::steps_between(&20_u32, &4_000_100_u32), Some(4_000_080_usize)); |
| 1296 | + assert_eq!(Step::steps_between(&-20_i32, &80_i32), Some(100_usize)); |
| 1297 | + assert_eq!(Step::steps_between(&-2_000_030_i32, &2_000_050_i32), Some(4_000_080_usize)); |
| 1298 | + |
| 1299 | + // Skip u64 / i64 to avoid dealing with 32-bit vs 64-bit platforms. |
| 1300 | + |
| 1301 | + assert_eq!(Step::steps_between(&20_u128, &200_u128), Some(180_usize)); |
| 1302 | + assert_eq!(Step::steps_between(&-20_i128, &80_i128), Some(100_usize)); |
| 1303 | + if cfg!(target_pointer_width = "64") { |
| 1304 | + assert_eq!(Step::steps_between(&20_u128, &0x1_0000_0000_0000_0019_u128), Some(usize::MAX)); |
| 1305 | + assert_eq!(Step::steps_between(&20_i128, &0x1_0000_0000_0000_0019_i128), Some(usize::MAX)); |
| 1306 | + } |
| 1307 | + assert_eq!(Step::steps_between(&20_u128, &0x1_0000_0000_0000_0020_u128), None); |
| 1308 | + assert_eq!(Step::steps_between(&20_i128, &0x1_0000_0000_0000_0020_i128), None); |
| 1309 | + assert_eq!(Step::steps_between(&-0x1_0000_0000_0000_0000_i128, &0x1_0000_0000_0000_0000_i128), None); |
1289 | 1310 | }
|
1290 | 1311 |
|
1291 | 1312 | #[test]
|
1292 | 1313 | fn test_step_forward() {
|
1293 |
| - assert_eq!((-120_i8).forward(200_usize), Some(80_i8)); |
| 1314 | + assert_eq!((55_u8).forward(200_usize), Some(255_u8)); |
| 1315 | + assert_eq!((252_u8).forward(200_usize), None); |
| 1316 | + assert_eq!((0_u8).forward(256_usize), None); |
| 1317 | + assert_eq!((-110_i8).forward(200_usize), Some(90_i8)); |
| 1318 | + assert_eq!((-110_i8).forward(248_usize), None); |
| 1319 | + assert_eq!((-126_i8).forward(256_usize), None); |
| 1320 | + |
| 1321 | + assert_eq!((35_u16).forward(100_usize), Some(135_u16)); |
| 1322 | + assert_eq!((35_u16).forward(65500_usize), Some(u16::MAX)); |
| 1323 | + assert_eq!((36_u16).forward(65500_usize), None); |
| 1324 | + assert_eq!((-110_i16).forward(200_usize), Some(90_i16)); |
| 1325 | + assert_eq!((-20_030_i16).forward(50_050_usize), Some(30_020_i16)); |
| 1326 | + assert_eq!((-10_i16).forward(40_000_usize), None); |
| 1327 | + assert_eq!((-10_i16).forward(70_000_usize), None); |
| 1328 | + |
| 1329 | + assert_eq!((10_u128).forward(70_000_usize), Some(70_010_u128)); |
| 1330 | + assert_eq!((10_i128).forward(70_030_usize), Some(70_020_i128)); |
| 1331 | + assert_eq!((0xffff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_u128).forward(0xff_usize), Some(u128::MAX)); |
| 1332 | + assert_eq!((0xffff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_u128).forward(0x100_usize), None); |
| 1333 | + assert_eq!((0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128).forward(0xff_usize), Some(i128::MAX)); |
| 1334 | + assert_eq!((0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128).forward(0x100_usize), None); |
1294 | 1335 | }
|
1295 | 1336 |
|
1296 | 1337 | #[test]
|
1297 | 1338 | fn test_step_backward() {
|
1298 |
| - assert_eq!((120_i8).backward(200_usize), Some(-80_i8)); |
| 1339 | + assert_eq!((255_u8).backward(200_usize), Some(55_u8)); |
| 1340 | + assert_eq!((100_u8).backward(200_usize), None); |
| 1341 | + assert_eq!((255_u8).backward(256_usize), None); |
| 1342 | + assert_eq!((90_i8).backward(200_usize), Some(-110_i8)); |
| 1343 | + assert_eq!((110_i8).backward(248_usize), None); |
| 1344 | + assert_eq!((127_i8).backward(256_usize), None); |
| 1345 | + |
| 1346 | + assert_eq!((135_u16).backward(100_usize), Some(35_u16)); |
| 1347 | + assert_eq!((u16::MAX).backward(65500_usize), Some(35_u16)); |
| 1348 | + assert_eq!((10_u16).backward(11_usize), None); |
| 1349 | + assert_eq!((90_i16).backward(200_usize), Some(-110_i16)); |
| 1350 | + assert_eq!((30_020_i16).backward(50_050_usize), Some(-20_030_i16)); |
| 1351 | + assert_eq!((-10_i16).backward(40_000_usize), None); |
| 1352 | + assert_eq!((-10_i16).backward(70_000_usize), None); |
| 1353 | + |
| 1354 | + assert_eq!((70_010_u128).backward(70_000_usize), Some(10_u128)); |
| 1355 | + assert_eq!((70_020_i128).backward(70_030_usize), Some(10_i128)); |
| 1356 | + assert_eq!((10_u128).backward(7_usize), Some(3_u128)); |
| 1357 | + assert_eq!((10_u128).backward(11_usize), None); |
| 1358 | + assert_eq!((-0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128).backward(0xfe_usize), Some(i128::MIN)); |
| 1359 | + assert_eq!((-0x7fff_ffff_ffff_ffff__ffff_ffff_ffff_ff00_i128).backward(0xff_usize), Some(i128::MIN)); |
1299 | 1360 | }
|
0 commit comments