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 #[inline(always)]
11 fn can_merge(&self, b: &Self) -> bool {
12 self.start == b.end || b.start == self.end
13 }
14}
15
16#[cfg(test)]
17mod tests {
18 use super::*;
19
20 #[test]
21 fn test_can_merge_adjacent() {
22 let a = 0..5;
23 let b = 5..10;
24 assert!(a.can_merge(&b));
25 assert!(b.can_merge(&a));
26 }
27
28 #[test]
29 fn test_cannot_merge_non_adjacent_non_overlapping() {
30 let a = 0..5;
31 let b = 7..10;
32 assert!(!a.can_merge(&b));
33 assert!(!b.can_merge(&a));
34 }
35
36 #[test]
37 fn test_cannot_merge_disjoint() {
38 let a = 0..5;
39 let b = 6..15;
40 assert!(!a.can_merge(&b));
41 assert!(!b.can_merge(&a));
42 }
43}