alnyan/yggdrasil: update btree_monstruosity

This commit is contained in:
Mark Poliakov 2024-10-31 13:35:23 +02:00
parent 10fd79828d
commit 6b54882b19
4 changed files with 137 additions and 156 deletions

6
Cargo.lock generated
View File

@ -1,12 +1,12 @@
# This file is automatically @generated by Cargo. # This file is automatically @generated by Cargo.
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 4
[[package]] [[package]]
name = "btree_monstrousity" name = "btree_monstrousity"
version = "0.0.4" version = "0.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4d0977e9c15f276380f16f2e9594257c258172b23af39ffd2e4cf5971cb38c7" checksum = "2ec92912346b936c974181a172d9abc81f50d41e40118fc101dac8aa8134bee3"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"rustversion", "rustversion",

View File

@ -18,7 +18,7 @@ categories = ["data-structures"]
[dependencies] [dependencies]
serde = { version = "1.0.193", features = ["derive"], default-features = false } serde = { version = "1.0.193", features = ["derive"], default-features = false }
btree_monstrousity = { version = "0.0.4", features = [ btree_monstrousity = { version = "0.0.5", features = [
"btree_drain_filter", "btree_drain_filter",
"btree_cursors", "btree_cursors",
], default-features = false } ], default-features = false }

View File

@ -25,10 +25,10 @@ use core::fmt::{self, Debug};
use core::iter::once; use core::iter::once;
use core::marker::PhantomData; use core::marker::PhantomData;
use btree_monstrousity::BTreeMap;
use btree_monstrousity::btree_map::{ use btree_monstrousity::btree_map::{
IntoIter as BTreeMapIntoIter, SearchBoundCustom, IntoIter as BTreeMapIntoIter, SearchBoundCustom,
}; };
use btree_monstrousity::BTreeMap;
use either::Either; use either::Either;
use itertools::Itertools; use itertools::Itertools;
use serde::de::{SeqAccess, Visitor}; use serde::de::{SeqAccess, Visitor};
@ -53,8 +53,8 @@ use crate::{DiscreteFinite, InclusiveInterval};
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// // Make a map of ranges to booleans /// // Make a map of ranges to booleans
/// let mut map = DiscreteRangeMap::from_slice_strict([ /// let mut map = DiscreteRangeMap::from_slice_strict([
@ -126,8 +126,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::{ie, ii};
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::{ie, ii};
/// ///
/// let mut map = DiscreteRangeMap::new(); /// let mut map = DiscreteRangeMap::new();
/// ///
@ -159,8 +159,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -171,10 +171,10 @@ where
/// ///
/// let mut overlapping = map.overlapping(ie(2, 8)); /// let mut overlapping = map.overlapping(ie(2, 8));
/// ///
/// assert_eq!( /// assert_eq!(overlapping.collect::<Vec<_>>(), [
/// overlapping.collect::<Vec<_>>(), /// (&ie(1, 4), &false),
/// [(&ie(1, 4), &false), (&ie(4, 8), &true)] /// (&ie(4, 8), &true)
/// ); /// ]);
/// ``` /// ```
pub fn overlapping<Q>( pub fn overlapping<Q>(
&self, &self,
@ -206,8 +206,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let mut map = DiscreteRangeMap::from_slice_strict([ /// let mut map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -248,8 +248,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -271,8 +271,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// let mut map = /// let mut map =
/// DiscreteRangeMap::from_slice_strict([(ie(1, 4), false)]) /// DiscreteRangeMap::from_slice_strict([(ie(1, 4), false)])
/// .unwrap(); /// .unwrap();
@ -292,8 +292,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -318,8 +318,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::{ie, iu};
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::{ie, iu};
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -367,8 +367,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let mut map = DiscreteRangeMap::from_slice_strict([ /// let mut map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -379,15 +379,15 @@ where
/// ///
/// let mut removed = map.remove_overlapping(ie(2, 8)); /// let mut removed = map.remove_overlapping(ie(2, 8));
/// ///
/// assert_eq!( /// assert_eq!(removed.collect::<Vec<_>>(), [
/// removed.collect::<Vec<_>>(), /// (ie(1, 4), false),
/// [(ie(1, 4), false), (ie(4, 8), true)] /// (ie(4, 8), true)
/// ); /// ]);
/// ///
/// assert_eq!( /// assert_eq!(map.into_iter().collect::<Vec<_>>(), [(
/// map.into_iter().collect::<Vec<_>>(), /// ie(8, 100),
/// [(ie(8, 100), false)] /// false
/// ); /// )]);
/// ``` /// ```
pub fn remove_overlapping<'a, Q>( pub fn remove_overlapping<'a, Q>(
&'a mut self, &'a mut self,
@ -431,8 +431,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::{ie, ii};
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::{ie, ii};
/// ///
/// let mut base = DiscreteRangeMap::from_slice_strict([ /// let mut base = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -447,10 +447,11 @@ where
/// ]) /// ])
/// .unwrap(); /// .unwrap();
/// ///
/// assert_eq!( /// assert_eq!(base.cut(ie(2, 40)).collect::<Vec<_>>(), [
/// base.cut(ie(2, 40)).collect::<Vec<_>>(), /// (ie(2, 4), false),
/// [(ie(2, 4), false), (ie(4, 8), true), (ie(8, 40), false),] /// (ie(4, 8), true),
/// ); /// (ie(8, 40), false),
/// ]);
/// assert_eq!(base, after_cut); /// assert_eq!(base, after_cut);
/// ``` /// ```
pub fn cut<'a, Q>(&'a mut self, range: Q) -> impl Iterator<Item = (K, V)> pub fn cut<'a, Q>(&'a mut self, range: Q) -> impl Iterator<Item = (K, V)>
@ -750,8 +751,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::{ie, ii, iu};
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::{ie, ii, iu};
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 3), false), /// (ie(1, 3), false),
@ -762,15 +763,16 @@ where
/// ///
/// let mut gaps = map.gaps_untrimmed(ii(4, 120)); /// let mut gaps = map.gaps_untrimmed(ii(4, 120));
/// ///
/// assert_eq!( /// assert_eq!(gaps.collect::<Vec<_>>(), [
/// gaps.collect::<Vec<_>>(), /// ie(3, 5),
/// [ie(3, 5), ie(7, 9), iu(100)] /// ie(7, 9),
/// ); /// iu(100)
/// ]);
/// ``` /// ```
pub fn gaps_untrimmed<'a, Q>( pub fn gaps_untrimmed<'a, Q>(
&'a self, &'a self,
range: Q, range: Q,
) -> impl Iterator<Item = K> + '_ ) -> impl Iterator<Item = K> + 'a
where where
Q: RangeType<I> + 'a, Q: RangeType<I> + 'a,
{ {
@ -837,8 +839,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::{ie, ii, iu};
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::{ie, ii, iu};
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 3), false), /// (ie(1, 3), false),
@ -849,15 +851,16 @@ where
/// ///
/// let mut gaps = map.gaps_trimmed(ii(4, 120)); /// let mut gaps = map.gaps_trimmed(ii(4, 120));
/// ///
/// assert_eq!( /// assert_eq!(gaps.collect::<Vec<_>>(), [
/// gaps.collect::<Vec<_>>(), /// ie(4, 5),
/// [ie(4, 5), ie(7, 9), ii(100, 120)] /// ie(7, 9),
/// ); /// ii(100, 120)
/// ]);
/// ``` /// ```
pub fn gaps_trimmed<'a, Q>( pub fn gaps_trimmed<'a, Q>(
&'a self, &'a self,
range: Q, range: Q,
) -> impl Iterator<Item = K> + '_ ) -> impl Iterator<Item = K> + 'a
where where
Q: RangeType<I> + 'a, Q: RangeType<I> + 'a,
{ {
@ -932,8 +935,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 3), false), /// (ie(1, 3), false),
@ -1097,10 +1100,10 @@ where
/// Ok(ie(10, 16)) /// Ok(ie(10, 16))
/// ); /// );
/// ///
/// assert_eq!( /// assert_eq!(map.into_iter().collect::<Vec<_>>(), [
/// map.into_iter().collect::<Vec<_>>(), /// (ie(1, 8), true),
/// [(ie(1, 8), true), (ie(10, 16), false)] /// (ie(10, 16), false)
/// ); /// ]);
/// ``` /// ```
pub fn insert_merge_touching( pub fn insert_merge_touching(
&mut self, &mut self,
@ -1185,10 +1188,11 @@ where
/// Ok(ie(10, 16)) /// Ok(ie(10, 16))
/// ); /// );
/// ///
/// assert_eq!( /// assert_eq!(map.into_iter().collect::<Vec<_>>(), [
/// map.into_iter().collect::<Vec<_>>(), /// (ie(1, 4), false),
/// [(ie(1, 4), false), (ie(4, 8), true), (ie(10, 16), false)] /// (ie(4, 8), true),
/// ); /// (ie(10, 16), false)
/// ]);
/// ``` /// ```
pub fn insert_merge_touching_if_values_equal( pub fn insert_merge_touching_if_values_equal(
&mut self, &mut self,
@ -1286,10 +1290,11 @@ where
/// ie(10, 16) /// ie(10, 16)
/// ); /// );
/// ///
/// assert_eq!( /// assert_eq!(map.into_iter().collect::<Vec<_>>(), [
/// map.into_iter().collect::<Vec<_>>(), /// (ie(1, 4), false),
/// [(ie(1, 4), false), (ie(4, 8), false), (ie(10, 16), false)] /// (ie(4, 8), false),
/// ); /// (ie(10, 16), false)
/// ]);
/// ``` /// ```
pub fn insert_merge_overlapping(&mut self, range: K, value: V) -> K { pub fn insert_merge_overlapping(&mut self, range: K, value: V) -> K {
invalid_range_panic(range); invalid_range_panic(range);
@ -1359,10 +1364,10 @@ where
/// ie(10, 16) /// ie(10, 16)
/// ); /// );
/// ///
/// assert_eq!( /// assert_eq!(map.into_iter().collect::<Vec<_>>(), [
/// map.into_iter().collect::<Vec<_>>(), /// (ie(1, 8), false),
/// [(ie(1, 8), false), (ie(10, 16), false)] /// (ie(10, 16), false)
/// ); /// ]);
/// ``` /// ```
pub fn insert_merge_touching_or_overlapping( pub fn insert_merge_touching_or_overlapping(
&mut self, &mut self,
@ -1423,8 +1428,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let mut map = /// let mut map =
/// DiscreteRangeMap::from_slice_strict([(ie(2, 8), false)]) /// DiscreteRangeMap::from_slice_strict([(ie(2, 8), false)])
@ -1432,10 +1437,11 @@ where
/// ///
/// map.insert_overwrite(ie(4, 6), true); /// map.insert_overwrite(ie(4, 6), true);
/// ///
/// assert_eq!( /// assert_eq!(map.into_iter().collect::<Vec<_>>(), [
/// map.into_iter().collect::<Vec<_>>(), /// (ie(2, 4), false),
/// [(ie(2, 4), false), (ie(4, 6), true), (ie(6, 8), false)] /// (ie(4, 6), true),
/// ); /// (ie(6, 8), false)
/// ]);
/// ``` /// ```
pub fn insert_overwrite( pub fn insert_overwrite(
&mut self, &mut self,
@ -1467,8 +1473,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -1501,8 +1507,8 @@ where
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let slice = /// let slice =
/// [(ie(1, 4), false), (ie(4, 8), true), (ie(8, 100), false)]; /// [(ie(1, 4), false), (ie(4, 8), true), (ie(8, 100), false)];
@ -1545,8 +1551,8 @@ impl<I, K, V> DiscreteRangeMap<I, K, V> {
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let mut map = DiscreteRangeMap::new(); /// let mut map = DiscreteRangeMap::new();
/// ///
@ -1563,8 +1569,8 @@ impl<I, K, V> DiscreteRangeMap<I, K, V> {
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let mut map = DiscreteRangeMap::new(); /// let mut map = DiscreteRangeMap::new();
/// ///
@ -1581,8 +1587,8 @@ impl<I, K, V> DiscreteRangeMap<I, K, V> {
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -1607,8 +1613,8 @@ impl<I, K, V> DiscreteRangeMap<I, K, V> {
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let mut map = DiscreteRangeMap::from_slice_strict([ /// let mut map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -1635,8 +1641,8 @@ impl<I, K, V> DiscreteRangeMap<I, K, V> {
/// ///
/// # Examples /// # Examples
/// ``` /// ```
/// use discrete_range_map::inclusive_interval::ie;
/// use discrete_range_map::DiscreteRangeMap; /// use discrete_range_map::DiscreteRangeMap;
/// use discrete_range_map::inclusive_interval::ie;
/// ///
/// let map = DiscreteRangeMap::from_slice_strict([ /// let map = DiscreteRangeMap::from_slice_strict([
/// (ie(1, 4), false), /// (ie(1, 4), false),
@ -1970,7 +1976,7 @@ mod tests {
use super::*; use super::*;
use crate::inclusive_interval::{ee, ei, ie, ii, iu, ue, ui, uu}; use crate::inclusive_interval::{ee, ei, ie, ii, iu, ue, ui, uu};
use crate::utils::{config, contains_point, Config, CutResult}; use crate::utils::{Config, CutResult, config, contains_point};
//only every other number to allow mathematical_overlapping_definition //only every other number to allow mathematical_overlapping_definition
//to test between bounds in finite using smaller intervalled finite //to test between bounds in finite using smaller intervalled finite
@ -2017,18 +2023,13 @@ mod tests {
Err(OverlapError { value: true }), Err(OverlapError { value: true }),
basic_slice(), basic_slice(),
); );
assert_insert_strict( assert_insert_strict(basic(), (ei(4, 5), true), Ok(()), [
basic(),
(ei(4, 5), true),
Ok(()),
[
(ui(4), false), (ui(4), false),
(ei(4, 5), true), (ei(4, 5), true),
(ee(5, 7), true), (ee(5, 7), true),
(ii(7, 7), false), (ii(7, 7), false),
(ie(14, 16), true), (ie(14, 16), true),
], ]);
);
} }
fn assert_insert_strict<const N: usize>( fn assert_insert_strict<const N: usize>(
mut before: DiscreteRangeMap<i8, InclusiveInterval<i8>, bool>, mut before: DiscreteRangeMap<i8, InclusiveInterval<i8>, bool>,
@ -2163,17 +2164,12 @@ mod tests {
#[test] #[test]
fn cut_tests() { fn cut_tests() {
assert_cut( assert_cut(basic(), ii(50, 60), [], [
basic(),
ii(50, 60),
[],
[
(ui(4), false), (ui(4), false),
(ee(5, 7), true), (ee(5, 7), true),
(ii(7, 7), false), (ii(7, 7), false),
(ie(14, 16), true), (ie(14, 16), true),
], ]);
);
assert_cut( assert_cut(
basic(), basic(),
uu(), uu(),
@ -2185,12 +2181,10 @@ mod tests {
], ],
[], [],
); );
assert_cut( assert_cut(basic(), ui(6), [(ui(4), false), (ei(5, 6), true)], [
basic(), (ii(7, 7), false),
ui(6), (ie(14, 16), true),
[(ui(4), false), (ei(5, 6), true)], ]);
[(ii(7, 7), false), (ie(14, 16), true)],
);
assert_cut( assert_cut(
basic(), basic(),
iu(6), iu(6),
@ -2213,11 +2207,11 @@ mod tests {
assert_gaps_untrimmed(basic(), ii(50, 60), [iu(16)]); assert_gaps_untrimmed(basic(), ii(50, 60), [iu(16)]);
assert_gaps_untrimmed(basic(), iu(50), [iu(16)]); assert_gaps_untrimmed(basic(), iu(50), [iu(16)]);
assert_gaps_untrimmed(basic(), ee(3, 16), [ei(4, 5), ee(7, 14)]); assert_gaps_untrimmed(basic(), ee(3, 16), [ei(4, 5), ee(7, 14)]);
assert_gaps_untrimmed( assert_gaps_untrimmed(basic(), ei(3, 16), [
basic(), ei(4, 5),
ei(3, 16), ee(7, 14),
[ei(4, 5), ee(7, 14), iu(16)], iu(16),
); ]);
assert_gaps_untrimmed(basic(), ue(5), []); assert_gaps_untrimmed(basic(), ue(5), []);
assert_gaps_untrimmed(basic(), ui(3), []); assert_gaps_untrimmed(basic(), ui(3), []);
assert_gaps_untrimmed(basic(), ii(5, 5), [ii(5, 5)]); assert_gaps_untrimmed(basic(), ii(5, 5), [ii(5, 5)]);
@ -2225,11 +2219,11 @@ mod tests {
assert_gaps_untrimmed(basic(), ii(7, 7), []); assert_gaps_untrimmed(basic(), ii(7, 7), []);
assert_gaps_untrimmed(basic(), ii(8, 8), [ii(8, 13)]); assert_gaps_untrimmed(basic(), ii(8, 8), [ii(8, 13)]);
assert_gaps_untrimmed( assert_gaps_untrimmed(basic(), ii(i8::MIN, i8::MAX), [
basic(), ei(4, 5),
ii(i8::MIN, i8::MAX), ee(7, 14),
[ei(4, 5), ee(7, 14), ii(16, i8::MAX)], ii(16, i8::MAX),
); ]);
assert_eq!( assert_eq!(
DiscreteRangeMap::from_slice_strict([( DiscreteRangeMap::from_slice_strict([(
ii(i8::MIN, i8::MAX), ii(i8::MIN, i8::MAX),
@ -2254,11 +2248,11 @@ mod tests {
assert_gaps_trimmed(basic(), ii(50, 60), [ii(50, 60)]); assert_gaps_trimmed(basic(), ii(50, 60), [ii(50, 60)]);
assert_gaps_trimmed(basic(), iu(50), [iu(50)]); assert_gaps_trimmed(basic(), iu(50), [iu(50)]);
assert_gaps_trimmed(basic(), ee(3, 16), [ei(4, 5), ee(7, 14)]); assert_gaps_trimmed(basic(), ee(3, 16), [ei(4, 5), ee(7, 14)]);
assert_gaps_trimmed( assert_gaps_trimmed(basic(), ei(3, 16), [
basic(), ei(4, 5),
ei(3, 16), ee(7, 14),
[ei(4, 5), ee(7, 14), ii(16, 16)], ii(16, 16),
); ]);
assert_gaps_trimmed(basic(), ue(5), []); assert_gaps_trimmed(basic(), ue(5), []);
assert_gaps_trimmed(basic(), ui(3), []); assert_gaps_trimmed(basic(), ui(3), []);
assert_gaps_trimmed(basic(), ii(5, 5), [ii(5, 5)]); assert_gaps_trimmed(basic(), ii(5, 5), [ii(5, 5)]);
@ -2266,11 +2260,11 @@ mod tests {
assert_gaps_trimmed(basic(), ii(7, 7), []); assert_gaps_trimmed(basic(), ii(7, 7), []);
assert_gaps_trimmed(basic(), ii(8, 8), [ii(8, 8)]); assert_gaps_trimmed(basic(), ii(8, 8), [ii(8, 8)]);
assert_gaps_trimmed( assert_gaps_trimmed(basic(), ii(i8::MIN, i8::MAX), [
basic(), ei(4, 5),
ii(i8::MIN, i8::MAX), ee(7, 14),
[ei(4, 5), ee(7, 14), ii(16, i8::MAX)], ii(16, i8::MAX),
); ]);
assert_eq!( assert_eq!(
DiscreteRangeMap::from_slice_strict([( DiscreteRangeMap::from_slice_strict([(
ii(i8::MIN, i8::MAX), ii(i8::MIN, i8::MAX),
@ -2406,17 +2400,12 @@ mod tests {
#[test] #[test]
fn insert_merge_overlapping_tests() { fn insert_merge_overlapping_tests() {
assert_insert_merge_overlapping( assert_insert_merge_overlapping(basic(), (ii(0, 2), true), ui(4), [
basic(),
(ii(0, 2), true),
ui(4),
[
(ui(4), true), (ui(4), true),
(ee(5, 7), true), (ee(5, 7), true),
(ii(7, 7), false), (ii(7, 7), false),
(ie(14, 16), true), (ie(14, 16), true),
], ]);
);
assert_insert_merge_overlapping( assert_insert_merge_overlapping(
basic(), basic(),
(ie(14, 16), false), (ie(14, 16), false),
@ -2445,12 +2434,10 @@ mod tests {
(ii(14, 18), true), (ii(14, 18), true),
], ],
); );
assert_insert_merge_overlapping( assert_insert_merge_overlapping(basic(), (uu(), false), uu(), [(
basic(),
(uu(), false),
uu(), uu(),
[(uu(), false)], false,
); )]);
} }
fn assert_insert_merge_overlapping<const N: usize>( fn assert_insert_merge_overlapping<const N: usize>(
mut before: DiscreteRangeMap<i8, InclusiveInterval<i8>, bool>, mut before: DiscreteRangeMap<i8, InclusiveInterval<i8>, bool>,
@ -2592,15 +2579,12 @@ mod tests {
map.insert_strict(r3, "range3").unwrap(); map.insert_strict(r3, "range3").unwrap();
let r: Vec<_> = map.drain().collect(); let r: Vec<_> = map.drain().collect();
assert_eq!( assert_eq!(&r, &[
&r,
&[
(ie(0, 10), "range0"), (ie(0, 10), "range0"),
(ie(20, 30), "range1"), (ie(20, 30), "range1"),
(ie(40, 50), "range2"), (ie(40, 50), "range2"),
(ie(60, 70), "range3"), (ie(60, 70), "range3"),
] ]);
);
assert!(map.is_empty()); assert!(map.is_empty());
} }
@ -2619,14 +2603,11 @@ mod tests {
let r: Vec<_> = map.cut_with_origin(ie(5, 45)).collect(); let r: Vec<_> = map.cut_with_origin(ie(5, 45)).collect();
assert_eq!( assert_eq!(&r, &[
&r,
&[
(ie(0, 10), ie(5, 10), "range0"), (ie(0, 10), ie(5, 10), "range0"),
(ie(20, 30), ie(20, 30), "range1"), (ie(20, 30), ie(20, 30), "range1"),
(ie(40, 50), ie(40, 45), "range2") (ie(40, 50), ie(40, 45), "range2")
] ]);
);
} }
#[test] #[test]

View File

@ -101,7 +101,7 @@ where
pub fn gaps_untrimmed<'a, Q>( pub fn gaps_untrimmed<'a, Q>(
&'a self, &'a self,
range: Q, range: Q,
) -> impl Iterator<Item = K> + '_ ) -> impl Iterator<Item = K> + 'a
where where
Q: RangeType<I> + 'a, Q: RangeType<I> + 'a,
{ {
@ -111,7 +111,7 @@ where
pub fn gaps_trimmed<'a, Q>( pub fn gaps_trimmed<'a, Q>(
&'a self, &'a self,
range: Q, range: Q,
) -> impl Iterator<Item = K> + '_ ) -> impl Iterator<Item = K> + 'a
where where
Q: RangeType<I> + 'a, Q: RangeType<I> + 'a,
{ {