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