fast_pull/base/
progress.rs

1use 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}