Skip to content

Commit bc5ab46

Browse files
committed
Add ProcessResults specializations test
1 parent 0410bca commit bc5ab46

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

tests/specializations.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,50 @@ quickcheck! {
9898
test_specializations(&v.into_iter().map_ok(|u| u.checked_add(1)));
9999
}
100100
}
101+
102+
quickcheck! {
103+
fn process_results(v: Vec<Result<u8, u8>>) -> () {
104+
helper(v.iter().copied());
105+
helper(v.iter().copied().filter(Result::is_ok));
106+
107+
fn helper(it: impl Iterator<Item = Result<u8, u8>> + Clone) {
108+
macro_rules! check_results_specialized {
109+
($src:expr, |$it:pat| $closure:expr) => {
110+
assert_eq!(
111+
itertools::process_results($src.clone(), |$it| $closure),
112+
itertools::process_results($src.clone(), |i| {
113+
let $it = Unspecialized(i);
114+
$closure
115+
}),
116+
)
117+
}
118+
}
119+
120+
check_results_specialized!(it, |i| i.count());
121+
check_results_specialized!(it, |i| i.last());
122+
check_results_specialized!(it, |i| i.collect::<Vec<_>>());
123+
check_results_specialized!(it, |i| {
124+
let mut parameters_from_fold = vec![];
125+
let fold_result = i.fold(vec![], |mut acc, v| {
126+
parameters_from_fold.push((acc.clone(), v.clone()));
127+
acc.push(v);
128+
acc
129+
});
130+
(parameters_from_fold, fold_result)
131+
});
132+
check_results_specialized!(it, |mut i| {
133+
let mut parameters_from_all = vec![];
134+
let first = i.next();
135+
let all_result = i.all(|x| {
136+
parameters_from_all.push(x.clone());
137+
Some(x)==first
138+
});
139+
(parameters_from_all, all_result)
140+
});
141+
let size = it.clone().count();
142+
for n in 0..size + 2 {
143+
check_results_specialized!(it, |mut i| i.nth(n));
144+
}
145+
}
146+
}
147+
}

0 commit comments

Comments
 (0)