]> git.proxmox.com Git - rustc.git/blob - vendor/itertools/tests/tuples.rs
New upstream version 1.43.0+dfsg1
[rustc.git] / vendor / itertools / tests / tuples.rs
1 extern crate itertools;
2
3 use itertools::Itertools;
4
5 #[test]
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]
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]
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]
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 }