mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-01-10 23:12:39 +00:00
109 lines
3.2 KiB
Rust
109 lines
3.2 KiB
Rust
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);
|
|
}
|