Update tests with Range parameter to BTreeMap::extract_if etc.
This commit is contained in:
parent
51d247c2cf
commit
1ae96fcd79
7 changed files with 56 additions and 46 deletions
|
|
@ -944,7 +944,7 @@ mod test_extract_if {
|
|||
#[test]
|
||||
fn empty() {
|
||||
let mut map: BTreeMap<i32, i32> = BTreeMap::new();
|
||||
map.extract_if(|_, _| unreachable!("there's nothing to decide on")).for_each(drop);
|
||||
map.extract_if(.., |_, _| unreachable!("there's nothing to decide on")).for_each(drop);
|
||||
assert_eq!(map.height(), None);
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -954,7 +954,7 @@ mod test_extract_if {
|
|||
fn consumed_keeping_all() {
|
||||
let pairs = (0..3).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
assert!(map.extract_if(|_, _| false).eq(iter::empty()));
|
||||
assert!(map.extract_if(.., |_, _| false).eq(iter::empty()));
|
||||
map.check();
|
||||
}
|
||||
|
||||
|
|
@ -963,7 +963,7 @@ mod test_extract_if {
|
|||
fn consumed_removing_all() {
|
||||
let pairs = (0..3).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
assert!(map.extract_if(|_, _| true).eq(pairs));
|
||||
assert!(map.extract_if(.., |_, _| true).eq(pairs));
|
||||
assert!(map.is_empty());
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -974,7 +974,7 @@ mod test_extract_if {
|
|||
let pairs = (0..3).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
assert!(
|
||||
map.extract_if(|_, v| {
|
||||
map.extract_if(.., |_, v| {
|
||||
*v += 6;
|
||||
false
|
||||
})
|
||||
|
|
@ -991,7 +991,7 @@ mod test_extract_if {
|
|||
let pairs = (0..3).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
assert!(
|
||||
map.extract_if(|_, v| {
|
||||
map.extract_if(.., |_, v| {
|
||||
*v += 6;
|
||||
true
|
||||
})
|
||||
|
|
@ -1005,7 +1005,7 @@ mod test_extract_if {
|
|||
fn underfull_keeping_all() {
|
||||
let pairs = (0..3).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
map.extract_if(|_, _| false).for_each(drop);
|
||||
map.extract_if(.., |_, _| false).for_each(drop);
|
||||
assert!(map.keys().copied().eq(0..3));
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1015,7 +1015,7 @@ mod test_extract_if {
|
|||
let pairs = (0..3).map(|i| (i, i));
|
||||
for doomed in 0..3 {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i == doomed).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i == doomed).for_each(drop);
|
||||
assert_eq!(map.len(), 2);
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1026,7 +1026,7 @@ mod test_extract_if {
|
|||
let pairs = (0..3).map(|i| (i, i));
|
||||
for sacred in 0..3 {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i != sacred).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i != sacred).for_each(drop);
|
||||
assert!(map.keys().copied().eq(sacred..=sacred));
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1036,7 +1036,7 @@ mod test_extract_if {
|
|||
fn underfull_removing_all() {
|
||||
let pairs = (0..3).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
map.extract_if(|_, _| true).for_each(drop);
|
||||
map.extract_if(.., |_, _| true).for_each(drop);
|
||||
assert!(map.is_empty());
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1045,7 +1045,7 @@ mod test_extract_if {
|
|||
fn height_0_keeping_all() {
|
||||
let pairs = (0..node::CAPACITY).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
map.extract_if(|_, _| false).for_each(drop);
|
||||
map.extract_if(.., |_, _| false).for_each(drop);
|
||||
assert!(map.keys().copied().eq(0..node::CAPACITY));
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1055,7 +1055,7 @@ mod test_extract_if {
|
|||
let pairs = (0..node::CAPACITY).map(|i| (i, i));
|
||||
for doomed in 0..node::CAPACITY {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i == doomed).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i == doomed).for_each(drop);
|
||||
assert_eq!(map.len(), node::CAPACITY - 1);
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1066,7 +1066,7 @@ mod test_extract_if {
|
|||
let pairs = (0..node::CAPACITY).map(|i| (i, i));
|
||||
for sacred in 0..node::CAPACITY {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i != sacred).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i != sacred).for_each(drop);
|
||||
assert!(map.keys().copied().eq(sacred..=sacred));
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1076,7 +1076,7 @@ mod test_extract_if {
|
|||
fn height_0_removing_all() {
|
||||
let pairs = (0..node::CAPACITY).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
map.extract_if(|_, _| true).for_each(drop);
|
||||
map.extract_if(.., |_, _| true).for_each(drop);
|
||||
assert!(map.is_empty());
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1084,7 +1084,7 @@ mod test_extract_if {
|
|||
#[test]
|
||||
fn height_0_keeping_half() {
|
||||
let mut map = BTreeMap::from_iter((0..16).map(|i| (i, i)));
|
||||
assert_eq!(map.extract_if(|i, _| *i % 2 == 0).count(), 8);
|
||||
assert_eq!(map.extract_if(.., |i, _| *i % 2 == 0).count(), 8);
|
||||
assert_eq!(map.len(), 8);
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1093,7 +1093,7 @@ mod test_extract_if {
|
|||
fn height_1_removing_all() {
|
||||
let pairs = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
map.extract_if(|_, _| true).for_each(drop);
|
||||
map.extract_if(.., |_, _| true).for_each(drop);
|
||||
assert!(map.is_empty());
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1103,7 +1103,7 @@ mod test_extract_if {
|
|||
let pairs = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i));
|
||||
for doomed in 0..MIN_INSERTS_HEIGHT_1 {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i == doomed).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i == doomed).for_each(drop);
|
||||
assert_eq!(map.len(), MIN_INSERTS_HEIGHT_1 - 1);
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1114,7 +1114,7 @@ mod test_extract_if {
|
|||
let pairs = (0..MIN_INSERTS_HEIGHT_1).map(|i| (i, i));
|
||||
for sacred in 0..MIN_INSERTS_HEIGHT_1 {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i != sacred).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i != sacred).for_each(drop);
|
||||
assert!(map.keys().copied().eq(sacred..=sacred));
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1125,7 +1125,7 @@ mod test_extract_if {
|
|||
let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));
|
||||
for doomed in (0..MIN_INSERTS_HEIGHT_2).step_by(12) {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i == doomed).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i == doomed).for_each(drop);
|
||||
assert_eq!(map.len(), MIN_INSERTS_HEIGHT_2 - 1);
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1136,7 +1136,7 @@ mod test_extract_if {
|
|||
let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));
|
||||
for sacred in (0..MIN_INSERTS_HEIGHT_2).step_by(12) {
|
||||
let mut map = BTreeMap::from_iter(pairs.clone());
|
||||
map.extract_if(|i, _| *i != sacred).for_each(drop);
|
||||
map.extract_if(.., |i, _| *i != sacred).for_each(drop);
|
||||
assert!(map.keys().copied().eq(sacred..=sacred));
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1146,7 +1146,7 @@ mod test_extract_if {
|
|||
fn height_2_removing_all() {
|
||||
let pairs = (0..MIN_INSERTS_HEIGHT_2).map(|i| (i, i));
|
||||
let mut map = BTreeMap::from_iter(pairs);
|
||||
map.extract_if(|_, _| true).for_each(drop);
|
||||
map.extract_if(.., |_, _| true).for_each(drop);
|
||||
assert!(map.is_empty());
|
||||
map.check();
|
||||
}
|
||||
|
|
@ -1162,7 +1162,7 @@ mod test_extract_if {
|
|||
map.insert(b.spawn(Panic::InDrop), ());
|
||||
map.insert(c.spawn(Panic::Never), ());
|
||||
|
||||
catch_unwind(move || map.extract_if(|dummy, _| dummy.query(true)).for_each(drop))
|
||||
catch_unwind(move || map.extract_if(.., |dummy, _| dummy.query(true)).for_each(drop))
|
||||
.unwrap_err();
|
||||
|
||||
assert_eq!(a.queried(), 1);
|
||||
|
|
@ -1185,7 +1185,7 @@ mod test_extract_if {
|
|||
map.insert(c.spawn(Panic::InQuery), ());
|
||||
|
||||
catch_unwind(AssertUnwindSafe(|| {
|
||||
map.extract_if(|dummy, _| dummy.query(true)).for_each(drop)
|
||||
map.extract_if(.., |dummy, _| dummy.query(true)).for_each(drop)
|
||||
}))
|
||||
.unwrap_err();
|
||||
|
||||
|
|
@ -1214,7 +1214,7 @@ mod test_extract_if {
|
|||
map.insert(c.spawn(Panic::InQuery), ());
|
||||
|
||||
{
|
||||
let mut it = map.extract_if(|dummy, _| dummy.query(true));
|
||||
let mut it = map.extract_if(.., |dummy, _| dummy.query(true));
|
||||
catch_unwind(AssertUnwindSafe(|| while it.next().is_some() {})).unwrap_err();
|
||||
// Iterator behavior after a panic is explicitly unspecified,
|
||||
// so this is just the current implementation:
|
||||
|
|
@ -1658,7 +1658,7 @@ fn assert_sync() {
|
|||
}
|
||||
|
||||
fn extract_if<T: Sync + Ord>(v: &mut BTreeMap<T, T>) -> impl Sync + '_ {
|
||||
v.extract_if(|_, _| false)
|
||||
v.extract_if(.., |_, _| false)
|
||||
}
|
||||
|
||||
fn iter<T: Sync>(v: &BTreeMap<T, T>) -> impl Sync + '_ {
|
||||
|
|
@ -1727,7 +1727,7 @@ fn assert_send() {
|
|||
}
|
||||
|
||||
fn extract_if<T: Send + Ord>(v: &mut BTreeMap<T, T>) -> impl Send + '_ {
|
||||
v.extract_if(|_, _| false)
|
||||
v.extract_if(.., |_, _| false)
|
||||
}
|
||||
|
||||
fn iter<T: Send + Sync>(v: &BTreeMap<T, T>) -> impl Send + '_ {
|
||||
|
|
|
|||
|
|
@ -368,8 +368,8 @@ fn test_extract_if() {
|
|||
let mut x = BTreeSet::from([1]);
|
||||
let mut y = BTreeSet::from([1]);
|
||||
|
||||
x.extract_if(|_| true).for_each(drop);
|
||||
y.extract_if(|_| false).for_each(drop);
|
||||
x.extract_if(.., |_| true).for_each(drop);
|
||||
y.extract_if(.., |_| false).for_each(drop);
|
||||
assert_eq!(x.len(), 0);
|
||||
assert_eq!(y.len(), 1);
|
||||
}
|
||||
|
|
@ -385,7 +385,7 @@ fn test_extract_if_drop_panic_leak() {
|
|||
set.insert(b.spawn(Panic::InDrop));
|
||||
set.insert(c.spawn(Panic::Never));
|
||||
|
||||
catch_unwind(move || set.extract_if(|dummy| dummy.query(true)).for_each(drop)).ok();
|
||||
catch_unwind(move || set.extract_if(.., |dummy| dummy.query(true)).for_each(drop)).ok();
|
||||
|
||||
assert_eq!(a.queried(), 1);
|
||||
assert_eq!(b.queried(), 1);
|
||||
|
|
@ -406,7 +406,7 @@ fn test_extract_if_pred_panic_leak() {
|
|||
set.insert(b.spawn(Panic::InQuery));
|
||||
set.insert(c.spawn(Panic::InQuery));
|
||||
|
||||
catch_unwind(AssertUnwindSafe(|| set.extract_if(|dummy| dummy.query(true)).for_each(drop)))
|
||||
catch_unwind(AssertUnwindSafe(|| set.extract_if(.., |dummy| dummy.query(true)).for_each(drop)))
|
||||
.ok();
|
||||
|
||||
assert_eq!(a.queried(), 1);
|
||||
|
|
@ -605,7 +605,7 @@ fn assert_sync() {
|
|||
}
|
||||
|
||||
fn extract_if<T: Sync + Ord>(v: &mut BTreeSet<T>) -> impl Sync + '_ {
|
||||
v.extract_if(|_| false)
|
||||
v.extract_if(.., |_| false)
|
||||
}
|
||||
|
||||
fn difference<T: Sync + Ord>(v: &BTreeSet<T>) -> impl Sync + '_ {
|
||||
|
|
@ -644,7 +644,7 @@ fn assert_send() {
|
|||
}
|
||||
|
||||
fn extract_if<T: Send + Ord>(v: &mut BTreeSet<T>) -> impl Send + '_ {
|
||||
v.extract_if(|_| false)
|
||||
v.extract_if(.., |_| false)
|
||||
}
|
||||
|
||||
fn difference<T: Send + Sync + Ord>(v: &BTreeSet<T>) -> impl Send + '_ {
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ pub fn clone_slim_100_and_clear(b: &mut Bencher) {
|
|||
#[bench]
|
||||
pub fn clone_slim_100_and_drain_all(b: &mut Bencher) {
|
||||
let src = slim_map(100);
|
||||
b.iter(|| src.clone().extract_if(|_, _| true).count())
|
||||
b.iter(|| src.clone().extract_if(.., |_, _| true).count())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
|
@ -394,7 +394,7 @@ pub fn clone_slim_100_and_drain_half(b: &mut Bencher) {
|
|||
let src = slim_map(100);
|
||||
b.iter(|| {
|
||||
let mut map = src.clone();
|
||||
assert_eq!(map.extract_if(|i, _| i % 2 == 0).count(), 100 / 2);
|
||||
assert_eq!(map.extract_if(.., |i, _| i % 2 == 0).count(), 100 / 2);
|
||||
assert_eq!(map.len(), 100 / 2);
|
||||
})
|
||||
}
|
||||
|
|
@ -457,7 +457,7 @@ pub fn clone_slim_10k_and_clear(b: &mut Bencher) {
|
|||
#[bench]
|
||||
pub fn clone_slim_10k_and_drain_all(b: &mut Bencher) {
|
||||
let src = slim_map(10_000);
|
||||
b.iter(|| src.clone().extract_if(|_, _| true).count())
|
||||
b.iter(|| src.clone().extract_if(.., |_, _| true).count())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
|
@ -465,7 +465,7 @@ pub fn clone_slim_10k_and_drain_half(b: &mut Bencher) {
|
|||
let src = slim_map(10_000);
|
||||
b.iter(|| {
|
||||
let mut map = src.clone();
|
||||
assert_eq!(map.extract_if(|i, _| i % 2 == 0).count(), 10_000 / 2);
|
||||
assert_eq!(map.extract_if(.., |i, _| i % 2 == 0).count(), 10_000 / 2);
|
||||
assert_eq!(map.len(), 10_000 / 2);
|
||||
})
|
||||
}
|
||||
|
|
@ -528,7 +528,7 @@ pub fn clone_fat_val_100_and_clear(b: &mut Bencher) {
|
|||
#[bench]
|
||||
pub fn clone_fat_val_100_and_drain_all(b: &mut Bencher) {
|
||||
let src = fat_val_map(100);
|
||||
b.iter(|| src.clone().extract_if(|_, _| true).count())
|
||||
b.iter(|| src.clone().extract_if(.., |_, _| true).count())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
|
@ -536,7 +536,7 @@ pub fn clone_fat_val_100_and_drain_half(b: &mut Bencher) {
|
|||
let src = fat_val_map(100);
|
||||
b.iter(|| {
|
||||
let mut map = src.clone();
|
||||
assert_eq!(map.extract_if(|i, _| i % 2 == 0).count(), 100 / 2);
|
||||
assert_eq!(map.extract_if(.., |i, _| i % 2 == 0).count(), 100 / 2);
|
||||
assert_eq!(map.len(), 100 / 2);
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ pub fn clone_100_and_clear(b: &mut Bencher) {
|
|||
#[bench]
|
||||
pub fn clone_100_and_drain_all(b: &mut Bencher) {
|
||||
let src = slim_set(100);
|
||||
b.iter(|| src.clone().extract_if(|_| true).count())
|
||||
b.iter(|| src.clone().extract_if(.., |_| true).count())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
|
@ -77,7 +77,7 @@ pub fn clone_100_and_drain_half(b: &mut Bencher) {
|
|||
let src = slim_set(100);
|
||||
b.iter(|| {
|
||||
let mut set = src.clone();
|
||||
assert_eq!(set.extract_if(|i| i % 2 == 0).count(), 100 / 2);
|
||||
assert_eq!(set.extract_if(.., |i| i % 2 == 0).count(), 100 / 2);
|
||||
assert_eq!(set.len(), 100 / 2);
|
||||
})
|
||||
}
|
||||
|
|
@ -140,7 +140,7 @@ pub fn clone_10k_and_clear(b: &mut Bencher) {
|
|||
#[bench]
|
||||
pub fn clone_10k_and_drain_all(b: &mut Bencher) {
|
||||
let src = slim_set(10_000);
|
||||
b.iter(|| src.clone().extract_if(|_| true).count())
|
||||
b.iter(|| src.clone().extract_if(.., |_| true).count())
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
|
@ -148,7 +148,7 @@ pub fn clone_10k_and_drain_half(b: &mut Bencher) {
|
|||
let src = slim_set(10_000);
|
||||
b.iter(|| {
|
||||
let mut set = src.clone();
|
||||
assert_eq!(set.extract_if(|i| i % 2 == 0).count(), 10_000 / 2);
|
||||
assert_eq!(set.extract_if(.., |i| i % 2 == 0).count(), 10_000 / 2);
|
||||
assert_eq!(set.len(), 10_000 / 2);
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
use std::ops::Range;
|
||||
|
||||
fn require_sync<T: Sync>(_: T) {}
|
||||
fn require_send_sync<T: Send + Sync>(_: T) {}
|
||||
|
||||
|
|
@ -55,7 +57,13 @@ fn test_btree_map() {
|
|||
|
||||
require_send_sync(async {
|
||||
let _v = None::<
|
||||
alloc::collections::btree_map::ExtractIf<'_, &u32, &u32, fn(&&u32, &mut &u32) -> bool>,
|
||||
alloc::collections::btree_map::ExtractIf<
|
||||
'_,
|
||||
&u32,
|
||||
&u32,
|
||||
Range<u32>,
|
||||
fn(&&u32, &mut &u32) -> bool,
|
||||
>,
|
||||
>;
|
||||
async {}.await;
|
||||
});
|
||||
|
|
@ -144,7 +152,9 @@ fn test_btree_set() {
|
|||
});
|
||||
|
||||
require_send_sync(async {
|
||||
let _v = None::<alloc::collections::btree_set::ExtractIf<'_, &u32, fn(&&u32) -> bool>>;
|
||||
let _v = None::<
|
||||
alloc::collections::btree_set::ExtractIf<'_, &u32, Range<u32>, fn(&&u32) -> bool>,
|
||||
>;
|
||||
async {}.await;
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ pub fn main() {
|
|||
test_all_refs(&mut 13, b.values_mut());
|
||||
|
||||
// Test forgetting the extractor.
|
||||
let mut d = b.extract_if(|_, i| *i < 30);
|
||||
let mut d = b.extract_if(.., |_, i| *i < 30);
|
||||
d.next().unwrap();
|
||||
mem::forget(d);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,14 +14,14 @@ fn main() {
|
|||
map.insert("c", ());
|
||||
|
||||
{
|
||||
let mut it = map.extract_if(|_, _| true);
|
||||
let mut it = map.extract_if(.., |_, _| true);
|
||||
catch_unwind(AssertUnwindSafe(|| while it.next().is_some() {})).unwrap_err();
|
||||
let result = catch_unwind(AssertUnwindSafe(|| it.next()));
|
||||
assert!(matches!(result, Ok(None)));
|
||||
}
|
||||
|
||||
{
|
||||
let mut it = map.extract_if(|_, _| true);
|
||||
let mut it = map.extract_if(.., |_, _| true);
|
||||
catch_unwind(AssertUnwindSafe(|| while let Some(_) = it.next() {})).unwrap_err();
|
||||
let result = catch_unwind(AssertUnwindSafe(|| it.next()));
|
||||
assert!(matches!(result, Ok(None)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue