diff --git a/Cargo.lock b/Cargo.lock index c20971b..7090bc2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "btree_monstrousity" -version = "0.0.4" +version = "0.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4d0977e9c15f276380f16f2e9594257c258172b23af39ffd2e4cf5971cb38c7" +checksum = "2ec92912346b936c974181a172d9abc81f50d41e40118fc101dac8aa8134bee3" dependencies = [ "cfg-if", "rustversion", diff --git a/Cargo.toml b/Cargo.toml index 2dc0d4e..e557633 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ categories = ["data-structures"] [dependencies] 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_cursors", ], default-features = false } diff --git a/src/discrete_range_map.rs b/src/discrete_range_map.rs index b85e59d..cb3680b 100644 --- a/src/discrete_range_map.rs +++ b/src/discrete_range_map.rs @@ -25,10 +25,10 @@ use core::fmt::{self, Debug}; use core::iter::once; use core::marker::PhantomData; +use btree_monstrousity::BTreeMap; use btree_monstrousity::btree_map::{ IntoIter as BTreeMapIntoIter, SearchBoundCustom, }; -use btree_monstrousity::BTreeMap; use either::Either; use itertools::Itertools; use serde::de::{SeqAccess, Visitor}; @@ -53,8 +53,8 @@ use crate::{DiscreteFinite, InclusiveInterval}; /// /// # Examples /// ``` -/// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; +/// use discrete_range_map::inclusive_interval::ie; /// /// // Make a map of ranges to booleans /// let mut map = DiscreteRangeMap::from_slice_strict([ @@ -126,8 +126,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::{ie, ii}; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::{ie, ii}; /// /// let mut map = DiscreteRangeMap::new(); /// @@ -159,8 +159,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -171,10 +171,10 @@ where /// /// let mut overlapping = map.overlapping(ie(2, 8)); /// - /// assert_eq!( - /// overlapping.collect::>(), - /// [(&ie(1, 4), &false), (&ie(4, 8), &true)] - /// ); + /// assert_eq!(overlapping.collect::>(), [ + /// (&ie(1, 4), &false), + /// (&ie(4, 8), &true) + /// ]); /// ``` pub fn overlapping( &self, @@ -206,8 +206,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let mut map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -248,8 +248,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -271,8 +271,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// let mut map = /// DiscreteRangeMap::from_slice_strict([(ie(1, 4), false)]) /// .unwrap(); @@ -292,8 +292,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -318,8 +318,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::{ie, iu}; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::{ie, iu}; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -367,8 +367,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let mut map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -379,15 +379,15 @@ where /// /// let mut removed = map.remove_overlapping(ie(2, 8)); /// - /// assert_eq!( - /// removed.collect::>(), - /// [(ie(1, 4), false), (ie(4, 8), true)] - /// ); + /// assert_eq!(removed.collect::>(), [ + /// (ie(1, 4), false), + /// (ie(4, 8), true) + /// ]); /// - /// assert_eq!( - /// map.into_iter().collect::>(), - /// [(ie(8, 100), false)] - /// ); + /// assert_eq!(map.into_iter().collect::>(), [( + /// ie(8, 100), + /// false + /// )]); /// ``` pub fn remove_overlapping<'a, Q>( &'a mut self, @@ -431,8 +431,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::{ie, ii}; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::{ie, ii}; /// /// let mut base = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -447,10 +447,11 @@ where /// ]) /// .unwrap(); /// - /// assert_eq!( - /// base.cut(ie(2, 40)).collect::>(), - /// [(ie(2, 4), false), (ie(4, 8), true), (ie(8, 40), false),] - /// ); + /// assert_eq!(base.cut(ie(2, 40)).collect::>(), [ + /// (ie(2, 4), false), + /// (ie(4, 8), true), + /// (ie(8, 40), false), + /// ]); /// assert_eq!(base, after_cut); /// ``` pub fn cut<'a, Q>(&'a mut self, range: Q) -> impl Iterator @@ -750,8 +751,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::{ie, ii, iu}; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::{ie, ii, iu}; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 3), false), @@ -762,15 +763,16 @@ where /// /// let mut gaps = map.gaps_untrimmed(ii(4, 120)); /// - /// assert_eq!( - /// gaps.collect::>(), - /// [ie(3, 5), ie(7, 9), iu(100)] - /// ); + /// assert_eq!(gaps.collect::>(), [ + /// ie(3, 5), + /// ie(7, 9), + /// iu(100) + /// ]); /// ``` pub fn gaps_untrimmed<'a, Q>( &'a self, range: Q, - ) -> impl Iterator + '_ + ) -> impl Iterator + 'a where Q: RangeType + 'a, { @@ -837,8 +839,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::{ie, ii, iu}; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::{ie, ii, iu}; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 3), false), @@ -849,15 +851,16 @@ where /// /// let mut gaps = map.gaps_trimmed(ii(4, 120)); /// - /// assert_eq!( - /// gaps.collect::>(), - /// [ie(4, 5), ie(7, 9), ii(100, 120)] - /// ); + /// assert_eq!(gaps.collect::>(), [ + /// ie(4, 5), + /// ie(7, 9), + /// ii(100, 120) + /// ]); /// ``` pub fn gaps_trimmed<'a, Q>( &'a self, range: Q, - ) -> impl Iterator + '_ + ) -> impl Iterator + 'a where Q: RangeType + 'a, { @@ -932,8 +935,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 3), false), @@ -1097,10 +1100,10 @@ where /// Ok(ie(10, 16)) /// ); /// - /// assert_eq!( - /// map.into_iter().collect::>(), - /// [(ie(1, 8), true), (ie(10, 16), false)] - /// ); + /// assert_eq!(map.into_iter().collect::>(), [ + /// (ie(1, 8), true), + /// (ie(10, 16), false) + /// ]); /// ``` pub fn insert_merge_touching( &mut self, @@ -1185,10 +1188,11 @@ where /// Ok(ie(10, 16)) /// ); /// - /// assert_eq!( - /// map.into_iter().collect::>(), - /// [(ie(1, 4), false), (ie(4, 8), true), (ie(10, 16), false)] - /// ); + /// assert_eq!(map.into_iter().collect::>(), [ + /// (ie(1, 4), false), + /// (ie(4, 8), true), + /// (ie(10, 16), false) + /// ]); /// ``` pub fn insert_merge_touching_if_values_equal( &mut self, @@ -1286,10 +1290,11 @@ where /// ie(10, 16) /// ); /// - /// assert_eq!( - /// map.into_iter().collect::>(), - /// [(ie(1, 4), false), (ie(4, 8), false), (ie(10, 16), false)] - /// ); + /// assert_eq!(map.into_iter().collect::>(), [ + /// (ie(1, 4), false), + /// (ie(4, 8), false), + /// (ie(10, 16), false) + /// ]); /// ``` pub fn insert_merge_overlapping(&mut self, range: K, value: V) -> K { invalid_range_panic(range); @@ -1359,10 +1364,10 @@ where /// ie(10, 16) /// ); /// - /// assert_eq!( - /// map.into_iter().collect::>(), - /// [(ie(1, 8), false), (ie(10, 16), false)] - /// ); + /// assert_eq!(map.into_iter().collect::>(), [ + /// (ie(1, 8), false), + /// (ie(10, 16), false) + /// ]); /// ``` pub fn insert_merge_touching_or_overlapping( &mut self, @@ -1423,8 +1428,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let mut map = /// DiscreteRangeMap::from_slice_strict([(ie(2, 8), false)]) @@ -1432,10 +1437,11 @@ where /// /// map.insert_overwrite(ie(4, 6), true); /// - /// assert_eq!( - /// map.into_iter().collect::>(), - /// [(ie(2, 4), false), (ie(4, 6), true), (ie(6, 8), false)] - /// ); + /// assert_eq!(map.into_iter().collect::>(), [ + /// (ie(2, 4), false), + /// (ie(4, 6), true), + /// (ie(6, 8), false) + /// ]); /// ``` pub fn insert_overwrite( &mut self, @@ -1467,8 +1473,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -1501,8 +1507,8 @@ where /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let slice = /// [(ie(1, 4), false), (ie(4, 8), true), (ie(8, 100), false)]; @@ -1545,8 +1551,8 @@ impl DiscreteRangeMap { /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let mut map = DiscreteRangeMap::new(); /// @@ -1563,8 +1569,8 @@ impl DiscreteRangeMap { /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let mut map = DiscreteRangeMap::new(); /// @@ -1581,8 +1587,8 @@ impl DiscreteRangeMap { /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -1607,8 +1613,8 @@ impl DiscreteRangeMap { /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let mut map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -1635,8 +1641,8 @@ impl DiscreteRangeMap { /// /// # Examples /// ``` - /// use discrete_range_map::inclusive_interval::ie; /// use discrete_range_map::DiscreteRangeMap; + /// use discrete_range_map::inclusive_interval::ie; /// /// let map = DiscreteRangeMap::from_slice_strict([ /// (ie(1, 4), false), @@ -1970,7 +1976,7 @@ mod tests { use super::*; 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 //to test between bounds in finite using smaller intervalled finite @@ -2017,18 +2023,13 @@ mod tests { Err(OverlapError { value: true }), basic_slice(), ); - assert_insert_strict( - basic(), + assert_insert_strict(basic(), (ei(4, 5), true), Ok(()), [ + (ui(4), false), (ei(4, 5), true), - Ok(()), - [ - (ui(4), false), - (ei(4, 5), true), - (ee(5, 7), true), - (ii(7, 7), false), - (ie(14, 16), true), - ], - ); + (ee(5, 7), true), + (ii(7, 7), false), + (ie(14, 16), true), + ]); } fn assert_insert_strict( mut before: DiscreteRangeMap, bool>, @@ -2163,17 +2164,12 @@ mod tests { #[test] fn cut_tests() { - assert_cut( - basic(), - ii(50, 60), - [], - [ - (ui(4), false), - (ee(5, 7), true), - (ii(7, 7), false), - (ie(14, 16), true), - ], - ); + assert_cut(basic(), ii(50, 60), [], [ + (ui(4), false), + (ee(5, 7), true), + (ii(7, 7), false), + (ie(14, 16), true), + ]); assert_cut( basic(), uu(), @@ -2185,12 +2181,10 @@ mod tests { ], [], ); - assert_cut( - basic(), - ui(6), - [(ui(4), false), (ei(5, 6), true)], - [(ii(7, 7), false), (ie(14, 16), true)], - ); + assert_cut(basic(), ui(6), [(ui(4), false), (ei(5, 6), true)], [ + (ii(7, 7), false), + (ie(14, 16), true), + ]); assert_cut( basic(), iu(6), @@ -2213,11 +2207,11 @@ mod tests { assert_gaps_untrimmed(basic(), ii(50, 60), [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(), - ei(3, 16), - [ei(4, 5), ee(7, 14), iu(16)], - ); + assert_gaps_untrimmed(basic(), ei(3, 16), [ + ei(4, 5), + ee(7, 14), + iu(16), + ]); assert_gaps_untrimmed(basic(), ue(5), []); assert_gaps_untrimmed(basic(), ui(3), []); 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(8, 8), [ii(8, 13)]); - assert_gaps_untrimmed( - basic(), - ii(i8::MIN, i8::MAX), - [ei(4, 5), ee(7, 14), ii(16, i8::MAX)], - ); + assert_gaps_untrimmed(basic(), ii(i8::MIN, i8::MAX), [ + ei(4, 5), + ee(7, 14), + ii(16, i8::MAX), + ]); assert_eq!( DiscreteRangeMap::from_slice_strict([( 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(), iu(50), [iu(50)]); assert_gaps_trimmed(basic(), ee(3, 16), [ei(4, 5), ee(7, 14)]); - assert_gaps_trimmed( - basic(), - ei(3, 16), - [ei(4, 5), ee(7, 14), ii(16, 16)], - ); + assert_gaps_trimmed(basic(), ei(3, 16), [ + ei(4, 5), + ee(7, 14), + ii(16, 16), + ]); assert_gaps_trimmed(basic(), ue(5), []); assert_gaps_trimmed(basic(), ui(3), []); 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(8, 8), [ii(8, 8)]); - assert_gaps_trimmed( - basic(), - ii(i8::MIN, i8::MAX), - [ei(4, 5), ee(7, 14), ii(16, i8::MAX)], - ); + assert_gaps_trimmed(basic(), ii(i8::MIN, i8::MAX), [ + ei(4, 5), + ee(7, 14), + ii(16, i8::MAX), + ]); assert_eq!( DiscreteRangeMap::from_slice_strict([( ii(i8::MIN, i8::MAX), @@ -2406,17 +2400,12 @@ mod tests { #[test] fn insert_merge_overlapping_tests() { - assert_insert_merge_overlapping( - basic(), - (ii(0, 2), true), - ui(4), - [ - (ui(4), true), - (ee(5, 7), true), - (ii(7, 7), false), - (ie(14, 16), true), - ], - ); + assert_insert_merge_overlapping(basic(), (ii(0, 2), true), ui(4), [ + (ui(4), true), + (ee(5, 7), true), + (ii(7, 7), false), + (ie(14, 16), true), + ]); assert_insert_merge_overlapping( basic(), (ie(14, 16), false), @@ -2445,12 +2434,10 @@ mod tests { (ii(14, 18), true), ], ); - assert_insert_merge_overlapping( - basic(), - (uu(), false), + assert_insert_merge_overlapping(basic(), (uu(), false), uu(), [( uu(), - [(uu(), false)], - ); + false, + )]); } fn assert_insert_merge_overlapping( mut before: DiscreteRangeMap, bool>, @@ -2592,15 +2579,12 @@ mod tests { map.insert_strict(r3, "range3").unwrap(); let r: Vec<_> = map.drain().collect(); - assert_eq!( - &r, - &[ - (ie(0, 10), "range0"), - (ie(20, 30), "range1"), - (ie(40, 50), "range2"), - (ie(60, 70), "range3"), - ] - ); + assert_eq!(&r, &[ + (ie(0, 10), "range0"), + (ie(20, 30), "range1"), + (ie(40, 50), "range2"), + (ie(60, 70), "range3"), + ]); assert!(map.is_empty()); } @@ -2619,14 +2603,11 @@ mod tests { let r: Vec<_> = map.cut_with_origin(ie(5, 45)).collect(); - assert_eq!( - &r, - &[ - (ie(0, 10), ie(5, 10), "range0"), - (ie(20, 30), ie(20, 30), "range1"), - (ie(40, 50), ie(40, 45), "range2") - ] - ); + assert_eq!(&r, &[ + (ie(0, 10), ie(5, 10), "range0"), + (ie(20, 30), ie(20, 30), "range1"), + (ie(40, 50), ie(40, 45), "range2") + ]); } #[test] diff --git a/src/discrete_range_set.rs b/src/discrete_range_set.rs index b951377..85e5a0d 100644 --- a/src/discrete_range_set.rs +++ b/src/discrete_range_set.rs @@ -101,7 +101,7 @@ where pub fn gaps_untrimmed<'a, Q>( &'a self, range: Q, - ) -> impl Iterator + '_ + ) -> impl Iterator + 'a where Q: RangeType + 'a, { @@ -111,7 +111,7 @@ where pub fn gaps_trimmed<'a, Q>( &'a self, range: Q, - ) -> impl Iterator + '_ + ) -> impl Iterator + 'a where Q: RangeType + 'a, {