overlap_demo/
overlap_demo.rs

1use ranges_ext::RangeSet;
2
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    println!("=== 测试:kind 不同时,后者覆盖交集 ===\n");
5
6    let mut set = RangeSet::<i32, &str>::new();
7
8    // 场景 1: 完全覆盖
9    println!("场景 1: 完全覆盖");
10    set.add(10..20, "A")?;
11    println!("添加 [10, 20) kind=A");
12    for info in set.iter() {
13        println!(
14            "  [{}, {}) kind={}",
15            info.range.start, info.range.end, info.kind
16        );
17    }
18
19    set.add(10..20, "B")?;
20    println!("添加 [10, 20) kind=B (完全覆盖)");
21    for info in set.iter() {
22        println!(
23            "  [{}, {}) kind={}",
24            info.range.start, info.range.end, info.kind
25        );
26    }
27
28    // 场景 2: 部分覆盖(左侧)
29    println!("\n场景 2: 部分覆盖(左侧)");
30    set.clear();
31    set.add(10..30, "A")?;
32    println!("添加 [10, 30) kind=A");
33    for info in set.iter() {
34        println!(
35            "  [{}, {}) kind={}",
36            info.range.start, info.range.end, info.kind
37        );
38    }
39
40    set.add(5..20, "B")?;
41    println!("添加 [5, 20) kind=B (覆盖左侧)");
42    for info in set.iter() {
43        println!(
44            "  [{}, {}) kind={}",
45            info.range.start, info.range.end, info.kind
46        );
47    }
48
49    // 场景 3: 部分覆盖(右侧)
50    println!("\n场景 3: 部分覆盖(右侧)");
51    set.clear();
52    set.add(10..30, "A")?;
53    println!("添加 [10, 30) kind=A");
54    for info in set.iter() {
55        println!(
56            "  [{}, {}) kind={}",
57            info.range.start, info.range.end, info.kind
58        );
59    }
60
61    set.add(20..35, "B")?;
62    println!("添加 [20, 35) kind=B (覆盖右侧)");
63    for info in set.iter() {
64        println!(
65            "  [{}, {}) kind={}",
66            info.range.start, info.range.end, info.kind
67        );
68    }
69
70    // 场景 4: 中间覆盖(分裂原区间)
71    println!("\n场景 4: 中间覆盖(分裂原区间)");
72    set.clear();
73    set.add(10..40, "A")?;
74    println!("添加 [10, 40) kind=A");
75    for info in set.iter() {
76        println!(
77            "  [{}, {}) kind={}",
78            info.range.start, info.range.end, info.kind
79        );
80    }
81
82    set.add(20..30, "B")?;
83    println!("添加 [20, 30) kind=B (覆盖中间,分裂 A)");
84    for info in set.iter() {
85        println!(
86            "  [{}, {}) kind={}",
87            info.range.start, info.range.end, info.kind
88        );
89    }
90
91    // 场景 5: kind 相同时合并
92    println!("\n场景 5: kind 相同时合并(对比)");
93    set.clear();
94    set.add(10..20, "A")?;
95    set.add(30..40, "A")?;
96    println!("添加 [10, 20) kind=A 和 [30, 40) kind=A");
97    for info in set.iter() {
98        println!(
99            "  [{}, {}) kind={}",
100            info.range.start, info.range.end, info.kind
101        );
102    }
103
104    set.add(15..35, "A")?;
105    println!("添加 [15, 35) kind=A (相同 kind,合并)");
106    for info in set.iter() {
107        println!(
108            "  [{}, {}) kind={}",
109            info.range.start, info.range.end, info.kind
110        );
111    }
112
113    // 场景 6: 复杂场景 - 多个区间
114    println!("\n场景 6: 复杂场景 - 覆盖多个不同 kind 的区间");
115    set.clear();
116    set.add(0..10, "A")?;
117    set.add(10..20, "B")?;
118    set.add(20..30, "C")?;
119    println!("初始状态:");
120    for info in set.iter() {
121        println!(
122            "  [{}, {}) kind={}",
123            info.range.start, info.range.end, info.kind
124        );
125    }
126
127    set.add(5..25, "D")?;
128    println!("添加 [5, 25) kind=D (覆盖三个区间的部分)");
129    for info in set.iter() {
130        println!(
131            "  [{}, {}) kind={}",
132            info.range.start, info.range.end, info.kind
133        );
134    }
135
136    Ok(())
137}