Skip to content

Commit 417b526

Browse files
committed
Fix PadUsing::next_back (1) Test next/next_back
1 parent ff71fea commit 417b526

1 file changed

Lines changed: 39 additions & 0 deletions

File tree

tests/quick.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -998,6 +998,45 @@ quickcheck! {
998998
}
999999
}
10001000

1001+
quickcheck! {
1002+
fn pad_using_next_next_back(v: Vec<i8>) -> () {
1003+
let only_oks = v.into_iter().map(Ok).collect::<Vec<_>>();
1004+
for elements_required in 0..128 {
1005+
let mut oks_then_errs_vector = only_oks.clone();
1006+
while oks_then_errs_vector.len() < elements_required {
1007+
oks_then_errs_vector.push(Err(oks_then_errs_vector.len()));
1008+
}
1009+
let oks_then_errs_pad_using = only_oks.iter().copied().pad_using(elements_required, Err);
1010+
assert_eq!(
1011+
oks_then_errs_pad_using.clone().collect::<Vec<_>>(),
1012+
oks_then_errs_vector
1013+
);
1014+
// Check next, next_back (https://github.com/rust-itertools/itertools/issues/1065)
1015+
let mut iter_check = oks_then_errs_vector.into_iter();
1016+
let mut iter_real = oks_then_errs_pad_using;
1017+
let mut rng = rand::thread_rng();
1018+
loop {
1019+
let next_or_next_back = if rng.gen_bool(0.5) {
1020+
let element_next_check = iter_check.next();
1021+
let element_next_real = iter_real.next();
1022+
assert_eq!(element_next_check, element_next_real);
1023+
element_next_real
1024+
} else {
1025+
let element_next_back_check = iter_check.next_back();
1026+
let element_next_back_real = iter_real.next_back();
1027+
assert_eq!(element_next_back_check, element_next_back_real);
1028+
element_next_back_real
1029+
};
1030+
if next_or_next_back.is_none() {
1031+
assert!(iter_real.next().is_none());
1032+
assert!(iter_real.next_back().is_none());
1033+
break;
1034+
}
1035+
}
1036+
}
1037+
}
1038+
}
1039+
10011040
quickcheck! {
10021041
fn size_powerset(it: Iter<u8, Exact>) -> bool {
10031042
// Powerset cardinality gets large very quickly, limit input to keep test fast.

0 commit comments

Comments
 (0)