From 99b3d11ca82ee34592df68d8a0ec6575db800418 Mon Sep 17 00:00:00 2001 From: ArshLabs Date: Sat, 4 Jul 2026 17:02:49 +0530 Subject: [PATCH] library: expand HashSet extract_if coverage --- library/std/src/collections/hash/set/tests.rs | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/library/std/src/collections/hash/set/tests.rs b/library/std/src/collections/hash/set/tests.rs index d7bbc7bdc6a5b..5dfc02935c112 100644 --- a/library/std/src/collections/hash/set/tests.rs +++ b/library/std/src/collections/hash/set/tests.rs @@ -418,14 +418,32 @@ fn test_retain() { } #[test] -fn test_extract_if() { - let mut x: HashSet<_> = [1].iter().copied().collect(); - let mut y: HashSet<_> = [1].iter().copied().collect(); - - x.extract_if(|_| true).for_each(drop); - y.extract_if(|_| false).for_each(drop); - assert_eq!(x.len(), 0); - assert_eq!(y.len(), 1); +fn test_extract_if_empty() { + let mut set: HashSet = HashSet::new(); + let extracted: Vec<_> = + set.extract_if(|_| unreachable!("there's nothing to decide on")).collect(); + + assert!(extracted.is_empty()); + assert!(set.is_empty()); +} + +#[test] +fn test_extract_if_consuming_nothing() { + let mut set: HashSet<_> = (0..3).collect(); + let extracted: Vec<_> = set.extract_if(|_| false).collect(); + + assert!(extracted.is_empty()); + assert_eq!(set, HashSet::from([0, 1, 2])); +} + +#[test] +fn test_extract_if_consuming_all() { + let mut set: HashSet<_> = (0..3).collect(); + let mut extracted: Vec<_> = set.extract_if(|_| true).collect(); + extracted.sort_unstable(); + + assert_eq!(extracted, vec![0, 1, 2]); + assert!(set.is_empty()); } #[test]