123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- use itertools::EitherOrBoth;
- use itertools::free::merge_join_by;
- #[test]
- fn empty() {
- let left: Vec<u32> = vec![];
- let right: Vec<u32> = vec![];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
- #[test]
- fn left_only() {
- let left: Vec<u32> = vec![1,2,3];
- let right: Vec<u32> = vec![];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
- EitherOrBoth::Left(1),
- EitherOrBoth::Left(2),
- EitherOrBoth::Left(3)
- ];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
- #[test]
- fn right_only() {
- let left: Vec<u32> = vec![];
- let right: Vec<u32> = vec![1,2,3];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
- EitherOrBoth::Right(1),
- EitherOrBoth::Right(2),
- EitherOrBoth::Right(3)
- ];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
- #[test]
- fn first_left_then_right() {
- let left: Vec<u32> = vec![1,2,3];
- let right: Vec<u32> = vec![4,5,6];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
- EitherOrBoth::Left(1),
- EitherOrBoth::Left(2),
- EitherOrBoth::Left(3),
- EitherOrBoth::Right(4),
- EitherOrBoth::Right(5),
- EitherOrBoth::Right(6)
- ];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
- #[test]
- fn first_right_then_left() {
- let left: Vec<u32> = vec![4,5,6];
- let right: Vec<u32> = vec![1,2,3];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
- EitherOrBoth::Right(1),
- EitherOrBoth::Right(2),
- EitherOrBoth::Right(3),
- EitherOrBoth::Left(4),
- EitherOrBoth::Left(5),
- EitherOrBoth::Left(6)
- ];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
- #[test]
- fn interspersed_left_and_right() {
- let left: Vec<u32> = vec![1,3,5];
- let right: Vec<u32> = vec![2,4,6];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
- EitherOrBoth::Left(1),
- EitherOrBoth::Right(2),
- EitherOrBoth::Left(3),
- EitherOrBoth::Right(4),
- EitherOrBoth::Left(5),
- EitherOrBoth::Right(6)
- ];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
- #[test]
- fn overlapping_left_and_right() {
- let left: Vec<u32> = vec![1,3,4,6];
- let right: Vec<u32> = vec![2,3,4,5];
- let expected_result: Vec<EitherOrBoth<u32, u32>> = vec![
- EitherOrBoth::Left(1),
- EitherOrBoth::Right(2),
- EitherOrBoth::Both(3, 3),
- EitherOrBoth::Both(4, 4),
- EitherOrBoth::Right(5),
- EitherOrBoth::Left(6)
- ];
- let actual_result = merge_join_by(left, right, |l, r| l.cmp(r))
- .collect::<Vec<_>>();
- assert_eq!(expected_result, actual_result);
- }
|