overlap_demo/
overlap_demo.rs1use 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 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 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 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 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 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 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}