]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
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 | } |