Touching ranges of RangeInclusive are not merged
I found two cases where touching ranges are not correctly merged:
case 1
#[test]
fn case1() {
let mut ranges = Ranges::new();
ranges.insert(1..10);
ranges.insert(15..=20);
ranges.insert(10..=14);
dbg!(&ranges);
let (start, end) = ranges
.find_intersecting_ranges(&GenericRange::from(15..=15))
.unwrap();
assert_eq!(start, 0); // 1 is returned instead of 0
assert_eq!(end, 0); // 1 is returned instead of 0
}
test case1 ... FAILED
failures:
---- case1 stdout ----
[src/main.rs:13:5] &ranges = Ranges {
ranges: [
GenericRange {
start: Included(
1,
),
end: Included(
14,
),
},
GenericRange {
start: Included(
15,
),
end: Included(
20,
),
},
],
}
thread 'case1' panicked at src/main.rs:19:5:
assertion `left == right` failed
left: 1
right: 0
case 2
#[test]
fn case2() {
let mut ranges = Ranges::new();
ranges.insert(1..=9);
ranges.insert(15..=20);
ranges.insert(10..=14);
dbg!(&ranges);
let (start, end) = ranges
.find_intersecting_ranges(&GenericRange::from(15..=15))
.unwrap();
assert_eq!(start, 0); // 2 is returned instead of 0
assert_eq!(end, 0); // 2 is returned instead of 0
}
test case2 ... FAILED
failures:
---- case2 stdout ----
[src/main.rs:31:5] &ranges = Ranges {
ranges: [
GenericRange {
start: Included(
1,
),
end: Included(
9,
),
},
GenericRange {
start: Included(
10,
),
end: Included(
14,
),
},
GenericRange {
start: Included(
15,
),
end: Included(
20,
),
},
],
}
thread 'case2' panicked at src/main.rs:37:5:
assertion `left == right` failed
left: 2
right: 0
Edited by oblique