Skip to content

Commit a0eb01c

Browse files
committed
Added quickchecks
1 parent a88946d commit a0eb01c

File tree

1 file changed

+43
-15
lines changed

1 file changed

+43
-15
lines changed

tests/specializations.rs

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
extern crate itertools;
22

3+
#[macro_use]
4+
extern crate quickcheck;
5+
36
use itertools::{EitherOrBoth, Itertools};
47

58
use std::fmt::Debug;
@@ -36,13 +39,17 @@ where
3639
)
3740
}
3841

39-
fn check_specialized_count_last_nth_sizeh<'a, IterItem, Iter>(it: &Iter, expected_size: usize)
40-
where
42+
fn check_specialized_count_last_nth_sizeh<'a, IterItem, Iter>(
43+
it: &Iter,
44+
known_expected_size: Option<usize>,
45+
) where
4146
IterItem: 'a + Eq + Debug,
4247
Iter: Iterator<Item = IterItem> + Clone + 'a,
4348
{
4449
let size = it.clone().count();
45-
assert_eq!(size, expected_size);
50+
if let Some(expected_size) = known_expected_size {
51+
assert_eq!(size, expected_size);
52+
}
4653
check_specialized(it, |i| i.count());
4754
check_specialized(it, |i| i.last());
4855
for n in 0..size + 2 {
@@ -79,28 +86,36 @@ where
7986
});
8087
}
8188

82-
#[test]
83-
fn put_back() {
84-
let test_vec = vec![7, 4, 1];
89+
fn put_back_test(test_vec: Vec<i32>, known_expected_size: Option<usize>) {
8590
{
8691
// Lexical lifetimes support
8792
let pb = itertools::put_back(test_vec.iter());
88-
check_specialized_count_last_nth_sizeh(&pb, 3);
93+
check_specialized_count_last_nth_sizeh(&pb, known_expected_size);
8994
check_specialized_fold_xor(&pb);
9095
}
9196

9297
let mut pb = itertools::put_back(test_vec.into_iter());
9398
pb.put_back(1);
94-
check_specialized_count_last_nth_sizeh(&pb, 4);
95-
check_specialized_fold_xor(&pb);
99+
check_specialized_count_last_nth_sizeh(&pb, known_expected_size.map(|x| x + 1));
100+
check_specialized_fold_xor(&pb)
96101
}
97102

98103
#[test]
99-
fn merge_join_by() {
100-
let i1 = vec![1, 3, 5, 7, 8, 9].into_iter();
101-
let i2 = vec![0, 3, 4, 5].into_iter();
104+
fn put_back() {
105+
put_back_test(vec![7, 4, 1], Some(3));
106+
}
107+
108+
quickcheck! {
109+
fn put_back_qc(test_vec: Vec<i32>) -> () {
110+
put_back_test(test_vec, None)
111+
}
112+
}
113+
114+
fn merge_join_by_test(i1: Vec<usize>, i2: Vec<usize>, known_expected_size: Option<usize>) {
115+
let i1 = i1.into_iter();
116+
let i2 = i2.into_iter();
102117
let mjb = i1.clone().merge_join_by(i2.clone(), std::cmp::Ord::cmp);
103-
check_specialized_count_last_nth_sizeh(&mjb, 8);
118+
check_specialized_count_last_nth_sizeh(&mjb, known_expected_size);
104119
// Rust 1.24 compatibility:
105120
fn eob_left_z(eob: EitherOrBoth<usize, usize>) -> usize {
106121
eob.left().unwrap_or(0)
@@ -117,10 +132,23 @@ fn merge_join_by() {
117132
check_specialized_fold_xor(&mjb.clone().map(eob_right_z));
118133
check_specialized_fold_xor(&mjb.clone().map(eob_both_z));
119134

120-
// And the other way around
135+
// And the other way around
121136
let mjb = i2.merge_join_by(i1, std::cmp::Ord::cmp);
122-
check_specialized_count_last_nth_sizeh(&mjb, 8);
137+
check_specialized_count_last_nth_sizeh(&mjb, known_expected_size);
123138
check_specialized_fold_xor(&mjb.clone().map(eob_left_z));
124139
check_specialized_fold_xor(&mjb.clone().map(eob_right_z));
125140
check_specialized_fold_xor(&mjb.clone().map(eob_both_z));
126141
}
142+
143+
#[test]
144+
fn merge_join_by() {
145+
let i1 = vec![1, 3, 5, 7, 8, 9];
146+
let i2 = vec![0, 3, 4, 5];
147+
merge_join_by_test(i1, i2, Some(8));
148+
}
149+
150+
quickcheck! {
151+
fn merge_join_by_qc(i1: Vec<usize>, i2: Vec<usize>) -> () {
152+
merge_join_by_test(i1, i2, None)
153+
}
154+
}

0 commit comments

Comments
 (0)