1 extern crate itertools;
2 
3 use itertools::Itertools;
4 
5 #[test]
tuples()6 fn tuples() {
7     let v = [1, 2, 3, 4, 5];
8     let mut iter = v.iter().cloned().tuples();
9     assert_eq!(Some((1,)), iter.next());
10     assert_eq!(Some((2,)), iter.next());
11     assert_eq!(Some((3,)), iter.next());
12     assert_eq!(Some((4,)), iter.next());
13     assert_eq!(Some((5,)), iter.next());
14     assert_eq!(None, iter.next());
15     assert_eq!(None, iter.into_buffer().next());
16 
17     let mut iter = v.iter().cloned().tuples();
18     assert_eq!(Some((1, 2)), iter.next());
19     assert_eq!(Some((3, 4)), iter.next());
20     assert_eq!(None, iter.next());
21     itertools::assert_equal(vec![5], iter.into_buffer());
22 
23     let mut iter = v.iter().cloned().tuples();
24     assert_eq!(Some((1, 2, 3)), iter.next());
25     assert_eq!(None, iter.next());
26     itertools::assert_equal(vec![4, 5], iter.into_buffer());
27 
28     let mut iter = v.iter().cloned().tuples();
29     assert_eq!(Some((1, 2, 3, 4)), iter.next());
30     assert_eq!(None, iter.next());
31     itertools::assert_equal(vec![5], iter.into_buffer());
32 }
33 
34 #[test]
tuple_windows()35 fn tuple_windows() {
36     let v = [1, 2, 3, 4, 5];
37 
38     let mut iter = v.iter().cloned().tuple_windows();
39     assert_eq!(Some((1,)), iter.next());
40     assert_eq!(Some((2,)), iter.next());
41     assert_eq!(Some((3,)), iter.next());
42 
43     let mut iter = v.iter().cloned().tuple_windows();
44     assert_eq!(Some((1, 2)), iter.next());
45     assert_eq!(Some((2, 3)), iter.next());
46     assert_eq!(Some((3, 4)), iter.next());
47     assert_eq!(Some((4, 5)), iter.next());
48     assert_eq!(None, iter.next());
49 
50     let mut iter = v.iter().cloned().tuple_windows();
51     assert_eq!(Some((1, 2, 3)), iter.next());
52     assert_eq!(Some((2, 3, 4)), iter.next());
53     assert_eq!(Some((3, 4, 5)), iter.next());
54     assert_eq!(None, iter.next());
55 
56     let mut iter = v.iter().cloned().tuple_windows();
57     assert_eq!(Some((1, 2, 3, 4)), iter.next());
58     assert_eq!(Some((2, 3, 4, 5)), iter.next());
59     assert_eq!(None, iter.next());
60 
61     let v = [1, 2, 3];
62     let mut iter = v.iter().cloned().tuple_windows::<(_, _, _, _)>();
63     assert_eq!(None, iter.next());
64 }
65 
66 #[test]
next_tuple()67 fn next_tuple() {
68     let v = [1, 2, 3, 4, 5];
69     let mut iter = v.iter();
70     assert_eq!(iter.next_tuple().map(|(&x, &y)| (x, y)), Some((1, 2)));
71     assert_eq!(iter.next_tuple().map(|(&x, &y)| (x, y)), Some((3, 4)));
72     assert_eq!(iter.next_tuple::<(_, _)>(), None);
73 }
74 
75 #[test]
collect_tuple()76 fn collect_tuple() {
77     let v = [1, 2];
78     let iter = v.iter().cloned();
79     assert_eq!(iter.collect_tuple(), Some((1, 2)));
80 
81     let v = [1];
82     let iter = v.iter().cloned();
83     assert_eq!(iter.collect_tuple::<(_, _)>(), None);
84 
85     let v = [1, 2, 3];
86     let iter = v.iter().cloned();
87     assert_eq!(iter.collect_tuple::<(_, _)>(), None);
88 }
89