fast_pull/base/
progress.rs1use core::ops::Range;
2
3pub type ProgressEntry = Range<u64>;
4
5pub trait Mergeable {
6 fn can_merge(&self, other: &Self) -> bool;
7}
8
9impl Mergeable for ProgressEntry {
10 fn can_merge(&self, b: &Self) -> bool {
11 self.start == b.end || b.start == self.end
12 }
13}
14
15#[cfg(test)]
16mod tests {
17 use super::*;
18
19 #[test]
20 fn test_can_merge_adjacent() {
21 let a = 0..5;
22 let b = 5..10;
23 assert!(a.can_merge(&b));
24 assert!(b.can_merge(&a));
25 }
26
27 #[test]
28 fn test_cannot_merge_non_adjacent_non_overlapping() {
29 let a = 0..5;
30 let b = 7..10;
31 assert!(!a.can_merge(&b));
32 assert!(!b.can_merge(&a));
33 }
34
35 #[test]
36 fn test_cannot_merge_disjoint() {
37 let a = 0..5;
38 let b = 6..15;
39 assert!(!a.can_merge(&b));
40 assert!(!b.can_merge(&a));
41 }
42}