]> git.proxmox.com Git - rustc.git/blob - vendor/itertools-0.7.8/tests/merge_join.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / vendor / itertools-0.7.8 / tests / merge_join.rs
1 extern crate itertools;
2
3 use itertools::EitherOrBoth;
4 use itertools::free::merge_join_by;
5
6 #[test]
7 fn empty() {
8 let left: Vec<u32> = vec![];
9 let right: Vec<u32> = vec![];
10 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![];
11 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
12 .collect::<Vec<_>>();
13 assert_eq!(expected_result, actual_result);
14 }
15
16 #[test]
17 fn left_only() {
18 let left: Vec<u32> = vec![1,2,3];
19 let right: Vec<u32> = vec![];
20 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
21 EitherOrBoth::Left(1),
22 EitherOrBoth::Left(2),
23 EitherOrBoth::Left(3)
24 ];
25 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
26 .collect::<Vec<_>>();
27 assert_eq!(expected_result, actual_result);
28 }
29
30 #[test]
31 fn right_only() {
32 let left: Vec<u32> = vec![];
33 let right: Vec<u32> = vec![1,2,3];
34 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
35 EitherOrBoth::Right(1),
36 EitherOrBoth::Right(2),
37 EitherOrBoth::Right(3)
38 ];
39 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
40 .collect::<Vec<_>>();
41 assert_eq!(expected_result, actual_result);
42 }
43
44 #[test]
45 fn first_left_then_right() {
46 let left: Vec<u32> = vec![1,2,3];
47 let right: Vec<u32> = vec![4,5,6];
48 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
49 EitherOrBoth::Left(1),
50 EitherOrBoth::Left(2),
51 EitherOrBoth::Left(3),
52 EitherOrBoth::Right(4),
53 EitherOrBoth::Right(5),
54 EitherOrBoth::Right(6)
55 ];
56 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
57 .collect::<Vec<_>>();
58 assert_eq!(expected_result, actual_result);
59 }
60
61 #[test]
62 fn first_right_then_left() {
63 let left: Vec<u32> = vec![4,5,6];
64 let right: Vec<u32> = vec![1,2,3];
65 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
66 EitherOrBoth::Right(1),
67 EitherOrBoth::Right(2),
68 EitherOrBoth::Right(3),
69 EitherOrBoth::Left(4),
70 EitherOrBoth::Left(5),
71 EitherOrBoth::Left(6)
72 ];
73 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
74 .collect::<Vec<_>>();
75 assert_eq!(expected_result, actual_result);
76 }
77
78 #[test]
79 fn interspersed_left_and_right() {
80 let left: Vec<u32> = vec![1,3,5];
81 let right: Vec<u32> = vec![2,4,6];
82 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
83 EitherOrBoth::Left(1),
84 EitherOrBoth::Right(2),
85 EitherOrBoth::Left(3),
86 EitherOrBoth::Right(4),
87 EitherOrBoth::Left(5),
88 EitherOrBoth::Right(6)
89 ];
90 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
91 .collect::<Vec<_>>();
92 assert_eq!(expected_result, actual_result);
93 }
94
95 #[test]
96 fn overlapping_left_and_right() {
97 let left: Vec<u32> = vec![1,3,4,6];
98 let right: Vec<u32> = vec![2,3,4,5];
99 let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
100 EitherOrBoth::Left(1),
101 EitherOrBoth::Right(2),
102 EitherOrBoth::Both(3, 3),
103 EitherOrBoth::Both(4, 4),
104 EitherOrBoth::Right(5),
105 EitherOrBoth::Left(6)
106 ];
107 let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
108 .collect::<Vec<_>>();
109 assert_eq!(expected_result, actual_result);
110 }