]> git.proxmox.com Git - rustc.git/blame - vendor/itertools-0.8.2/tests/merge_join.rs
New upstream version 1.47.0+dfsg1
[rustc.git] / vendor / itertools-0.8.2 / tests / merge_join.rs
CommitLineData
532ac7d7
XL
1extern crate itertools;
2
3use itertools::EitherOrBoth;
4use itertools::free::merge_join_by;
5
6#[test]
7fn 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]
17fn 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]
31fn 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]
45fn 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]
62fn 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]
79fn 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]
96fn 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}