Add test for join_nonoverlapping.
This commit is contained in:
parent
359ff55ce3
commit
e16aa41117
|
@ -157,6 +157,7 @@ impl RangeOrdering {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
enum Joined {
|
enum Joined {
|
||||||
One(ScanRange),
|
One(ScanRange),
|
||||||
Two(ScanRange, ScanRange),
|
Two(ScanRange, ScanRange),
|
||||||
|
@ -757,7 +758,108 @@ mod tests {
|
||||||
BlockDb, WalletDb,
|
BlockDb, WalletDb,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{RangeOrdering, SpanningTree};
|
use super::{join_nonoverlapping, Joined, RangeOrdering, SpanningTree};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_join_nonoverlapping() {
|
||||||
|
fn test_range(left: ScanRange, right: ScanRange, expected_joined: Joined) {
|
||||||
|
let joined = join_nonoverlapping(left, right);
|
||||||
|
|
||||||
|
assert_eq!(joined, expected_joined);
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! range {
|
||||||
|
( $start:expr, $end:expr; $priority:ident ) => {
|
||||||
|
ScanRange::from_parts(
|
||||||
|
BlockHeight::from($start)..BlockHeight::from($end),
|
||||||
|
ScanPriority::$priority,
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! joined {
|
||||||
|
(
|
||||||
|
($a_start:expr, $a_end:expr; $a_priority:ident)
|
||||||
|
) => {
|
||||||
|
Joined::One(
|
||||||
|
range!($a_start, $a_end; $a_priority)
|
||||||
|
)
|
||||||
|
};
|
||||||
|
(
|
||||||
|
($a_start:expr, $a_end:expr; $a_priority:ident),
|
||||||
|
($b_start:expr, $b_end:expr; $b_priority:ident)
|
||||||
|
) => {
|
||||||
|
Joined::Two(
|
||||||
|
range!($a_start, $a_end; $a_priority),
|
||||||
|
range!($b_start, $b_end; $b_priority)
|
||||||
|
)
|
||||||
|
};
|
||||||
|
(
|
||||||
|
($a_start:expr, $a_end:expr; $a_priority:ident),
|
||||||
|
($b_start:expr, $b_end:expr; $b_priority:ident),
|
||||||
|
($c_start:expr, $c_end:expr; $c_priority:ident)
|
||||||
|
|
||||||
|
) => {
|
||||||
|
Joined::Three(
|
||||||
|
range!($a_start, $a_end; $a_priority),
|
||||||
|
range!($b_start, $b_end; $b_priority),
|
||||||
|
range!($c_start, $c_end; $c_priority)
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan ranges have the same priority and
|
||||||
|
// line up.
|
||||||
|
test_range(
|
||||||
|
range!(1, 9; OpenAdjacent),
|
||||||
|
range!(9, 15; OpenAdjacent),
|
||||||
|
joined!(
|
||||||
|
(1, 15; OpenAdjacent)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Scan ranges have different priorities,
|
||||||
|
// so we cannot merge them even though they
|
||||||
|
// line up.
|
||||||
|
test_range(
|
||||||
|
range!(1, 9; OpenAdjacent),
|
||||||
|
range!(9, 15; ChainTip),
|
||||||
|
joined!(
|
||||||
|
(1, 9; OpenAdjacent),
|
||||||
|
(9, 15; ChainTip)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Scan ranges have the same priority but
|
||||||
|
// do not line up.
|
||||||
|
test_range(
|
||||||
|
range!(1, 9; OpenAdjacent),
|
||||||
|
range!(13, 15; OpenAdjacent),
|
||||||
|
joined!(
|
||||||
|
(1, 9; OpenAdjacent),
|
||||||
|
(9, 13; Historic),
|
||||||
|
(13, 15; OpenAdjacent)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
test_range(
|
||||||
|
range!(1, 9; Historic),
|
||||||
|
range!(13, 15; OpenAdjacent),
|
||||||
|
joined!(
|
||||||
|
(1, 13; Historic),
|
||||||
|
(13, 15; OpenAdjacent)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
test_range(
|
||||||
|
range!(1, 9; OpenAdjacent),
|
||||||
|
range!(13, 15; Historic),
|
||||||
|
joined!(
|
||||||
|
(1, 9; OpenAdjacent),
|
||||||
|
(9, 15; Historic)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn range_ordering() {
|
fn range_ordering() {
|
||||||
|
|
Loading…
Reference in New Issue