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