summaryrefslogtreecommitdiffstats
path: root/library/alloc/src/collections/linked_list
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /library/alloc/src/collections/linked_list
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz
rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/alloc/src/collections/linked_list')
-rw-r--r--library/alloc/src/collections/linked_list/tests.rs53
1 files changed, 31 insertions, 22 deletions
diff --git a/library/alloc/src/collections/linked_list/tests.rs b/library/alloc/src/collections/linked_list/tests.rs
index 04594d55b..8dcd59d12 100644
--- a/library/alloc/src/collections/linked_list/tests.rs
+++ b/library/alloc/src/collections/linked_list/tests.rs
@@ -540,10 +540,10 @@ fn test_show() {
}
#[test]
-fn drain_filter_test() {
+fn extract_if_test() {
let mut m: LinkedList<u32> = LinkedList::new();
m.extend(&[1, 2, 3, 4, 5, 6]);
- let deleted = m.drain_filter(|v| *v < 4).collect::<Vec<_>>();
+ let deleted = m.extract_if(|v| *v < 4).collect::<Vec<_>>();
check_links(&m);
@@ -555,7 +555,7 @@ fn drain_filter_test() {
fn drain_to_empty_test() {
let mut m: LinkedList<u32> = LinkedList::new();
m.extend(&[1, 2, 3, 4, 5, 6]);
- let deleted = m.drain_filter(|_| true).collect::<Vec<_>>();
+ let deleted = m.extract_if(|_| true).collect::<Vec<_>>();
check_links(&m);
@@ -811,11 +811,11 @@ fn test_contains() {
}
#[test]
-fn drain_filter_empty() {
+fn extract_if_empty() {
let mut list: LinkedList<i32> = LinkedList::new();
{
- let mut iter = list.drain_filter(|_| true);
+ let mut iter = list.extract_if(|_| true);
assert_eq!(iter.size_hint(), (0, Some(0)));
assert_eq!(iter.next(), None);
assert_eq!(iter.size_hint(), (0, Some(0)));
@@ -828,13 +828,13 @@ fn drain_filter_empty() {
}
#[test]
-fn drain_filter_zst() {
+fn extract_if_zst() {
let mut list: LinkedList<_> = [(), (), (), (), ()].into_iter().collect();
let initial_len = list.len();
let mut count = 0;
{
- let mut iter = list.drain_filter(|_| true);
+ let mut iter = list.extract_if(|_| true);
assert_eq!(iter.size_hint(), (0, Some(initial_len)));
while let Some(_) = iter.next() {
count += 1;
@@ -851,14 +851,14 @@ fn drain_filter_zst() {
}
#[test]
-fn drain_filter_false() {
+fn extract_if_false() {
let mut list: LinkedList<_> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
let initial_len = list.len();
let mut count = 0;
{
- let mut iter = list.drain_filter(|_| false);
+ let mut iter = list.extract_if(|_| false);
assert_eq!(iter.size_hint(), (0, Some(initial_len)));
for _ in iter.by_ref() {
count += 1;
@@ -874,14 +874,14 @@ fn drain_filter_false() {
}
#[test]
-fn drain_filter_true() {
+fn extract_if_true() {
let mut list: LinkedList<_> = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].into_iter().collect();
let initial_len = list.len();
let mut count = 0;
{
- let mut iter = list.drain_filter(|_| true);
+ let mut iter = list.extract_if(|_| true);
assert_eq!(iter.size_hint(), (0, Some(initial_len)));
while let Some(_) = iter.next() {
count += 1;
@@ -898,7 +898,7 @@ fn drain_filter_true() {
}
#[test]
-fn drain_filter_complex() {
+fn extract_if_complex() {
{
// [+xxx++++++xxxxx++++x+x++]
let mut list = [
@@ -908,7 +908,7 @@ fn drain_filter_complex() {
.into_iter()
.collect::<LinkedList<_>>();
- let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();
+ let removed = list.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();
assert_eq!(removed.len(), 10);
assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);
@@ -926,7 +926,7 @@ fn drain_filter_complex() {
.into_iter()
.collect::<LinkedList<_>>();
- let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();
+ let removed = list.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();
assert_eq!(removed.len(), 10);
assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);
@@ -944,7 +944,7 @@ fn drain_filter_complex() {
.into_iter()
.collect::<LinkedList<_>>();
- let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();
+ let removed = list.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();
assert_eq!(removed.len(), 10);
assert_eq!(removed, vec![2, 4, 6, 18, 20, 22, 24, 26, 34, 36]);
@@ -961,7 +961,7 @@ fn drain_filter_complex() {
.into_iter()
.collect::<LinkedList<_>>();
- let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();
+ let removed = list.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();
assert_eq!(removed.len(), 10);
assert_eq!(removed, vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20]);
@@ -975,7 +975,7 @@ fn drain_filter_complex() {
.into_iter()
.collect::<LinkedList<_>>();
- let removed = list.drain_filter(|x| *x % 2 == 0).collect::<Vec<_>>();
+ let removed = list.extract_if(|x| *x % 2 == 0).collect::<Vec<_>>();
assert_eq!(removed.len(), 10);
assert_eq!(removed, vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20]);
@@ -985,7 +985,8 @@ fn drain_filter_complex() {
}
#[test]
-fn drain_filter_drop_panic_leak() {
+#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
+fn extract_if_drop_panic_leak() {
let d0 = CrashTestDummy::new(0);
let d1 = CrashTestDummy::new(1);
let d2 = CrashTestDummy::new(2);
@@ -1004,21 +1005,28 @@ fn drain_filter_drop_panic_leak() {
q.push_front(d1.spawn(Panic::InDrop));
q.push_front(d0.spawn(Panic::Never));
- catch_unwind(AssertUnwindSafe(|| drop(q.drain_filter(|_| true)))).unwrap_err();
+ catch_unwind(AssertUnwindSafe(|| q.extract_if(|_| true).for_each(drop))).unwrap_err();
assert_eq!(d0.dropped(), 1);
assert_eq!(d1.dropped(), 1);
+ assert_eq!(d2.dropped(), 0);
+ assert_eq!(d3.dropped(), 0);
+ assert_eq!(d4.dropped(), 0);
+ assert_eq!(d5.dropped(), 0);
+ assert_eq!(d6.dropped(), 0);
+ assert_eq!(d7.dropped(), 0);
+ drop(q);
assert_eq!(d2.dropped(), 1);
assert_eq!(d3.dropped(), 1);
assert_eq!(d4.dropped(), 1);
assert_eq!(d5.dropped(), 1);
assert_eq!(d6.dropped(), 1);
assert_eq!(d7.dropped(), 1);
- assert!(q.is_empty());
}
#[test]
-fn drain_filter_pred_panic_leak() {
+#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
+fn extract_if_pred_panic_leak() {
static mut DROPS: i32 = 0;
#[derive(Debug)]
@@ -1043,7 +1051,7 @@ fn drain_filter_pred_panic_leak() {
q.push_front(D(0));
catch_unwind(AssertUnwindSafe(|| {
- drop(q.drain_filter(|item| if item.0 >= 2 { panic!() } else { true }))
+ q.extract_if(|item| if item.0 >= 2 { panic!() } else { true }).for_each(drop)
}))
.ok();
@@ -1124,6 +1132,7 @@ fn test_drop_clear() {
}
#[test]
+#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
fn test_drop_panic() {
static mut DROPS: i32 = 0;