Skip to content

Commit 9d4dc29

Browse files
committed
Add tests for Step trait methods
1 parent 32d963e commit 9d4dc29

File tree

3 files changed

+73
-19
lines changed

3 files changed

+73
-19
lines changed

src/libcore/tests/iter.rs

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
// except according to those terms.
1010

1111
use core::iter::*;
12-
use core::{i8, i16, isize};
13-
use core::usize;
12+
use core::{i8, i16, isize, u16, usize, i128, u128};
1413

1514
#[test]
1615
fn test_lt() {
@@ -1285,15 +1284,77 @@ fn test_chain_fold() {
12851284

12861285
#[test]
12871286
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));
12881289
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);
12891310
}
12901311

12911312
#[test]
12921313
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);
12941335
}
12951336

12961337
#[test]
12971338
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));
12991360
}

src/libcore/tests/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#![feature(flt2dec)]
2424
#![feature(fmt_internals)]
2525
#![feature(iterator_step_by)]
26+
#![feature(i128)]
2627
#![feature(i128_type)]
2728
#![feature(inclusive_range)]
2829
#![feature(inclusive_range_syntax)]

src/test/run-pass/impl-trait/example-calendar.rs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -166,23 +166,15 @@ impl std::iter::Step for NaiveDate {
166166
unimplemented!()
167167
}
168168

169-
fn replace_one(&mut self) -> Self {
170-
mem::replace(self, NaiveDate(0, 0, 1))
171-
}
172-
173-
fn replace_zero(&mut self) -> Self {
174-
mem::replace(self, NaiveDate(0, 0, 0))
175-
}
176-
177-
fn add_one(&self) -> Self {
178-
self.succ()
179-
}
180-
181-
fn sub_one(&self) -> Self {
182-
unimplemented!()
169+
fn forward(&self, step_count: usize) -> Option<Self> {
170+
let mut result = *self;
171+
for _ in 0..step_count {
172+
result = result.succ();
173+
}
174+
Some(result)
183175
}
184176

185-
fn add_usize(&self, _: usize) -> Option<Self> {
177+
fn backward(&self, _step_count: usize) -> Option<Self> {
186178
unimplemented!()
187179
}
188180
}

0 commit comments

Comments
 (0)