use hashbrown::hash_map::DefaultHashBuilder;
use hashlink::linked_hash_set::{self , LinkedHashSet};
#[ allow(dead_code)]
fn assert_covariance() {
fn set<'new>(v: LinkedHashSet<&' static str>) -> LinkedHashSet<&'new str> {
v
}
fn iter<'a, ' new>(
v: linked_hash_set::Iter<'a, &' static str>,
) -> linked_hash_set::Iter<'a, &' new str> {
v
}
fn into_iter<'new>(
v: linked_hash_set::IntoIter<&'static str>,
) -> linked_hash_set::IntoIter<&'new str> {
v
}
fn difference<'a, ' new>(
v: linked_hash_set::Difference<'a, &' static str, DefaultHashBuilder>,
) -> linked_hash_set::Difference<'a, &' new str, DefaultHashBuilder> {
v
}
fn symmetric_difference<'a, ' new>(
v: linked_hash_set::SymmetricDifference<'a, &' static str, DefaultHashBuilder>,
) -> linked_hash_set::SymmetricDifference<'a, &' new str, DefaultHashBuilder> {
v
}
fn intersection<'a, ' new>(
v: linked_hash_set::Intersection<'a, &' static str, DefaultHashBuilder>,
) -> linked_hash_set::Intersection<'a, &' new str, DefaultHashBuilder> {
v
}
fn union<'a, ' new>(
v: linked_hash_set::Union<'a, &' static str, DefaultHashBuilder>,
) -> linked_hash_set::Union<'a, &' new str, DefaultHashBuilder> {
v
}
fn drain<'new>(
d: linked_hash_set::Drain<'static, &' static str>,
) -> linked_hash_set::Drain<'new, &' new str> {
d
}
}
#[ test]
fn test_zero_capacities() {
type HS = LinkedHashSet<i32>;
let s = HS::new();
assert_eq!(s.capacity(), 0 );
let s = HS::default();
assert_eq!(s.capacity(), 0 );
let s = HS::with_hasher(DefaultHashBuilder::default());
assert_eq!(s.capacity(), 0 );
let s = HS::with_capacity(0 );
assert_eq!(s.capacity(), 0 );
let s = HS::with_capacity_and_hasher(0 , DefaultHashBuilder::default());
assert_eq!(s.capacity(), 0 );
let mut s = HS::new();
s.insert(1 );
s.insert(2 );
s.remove(&1 );
s.remove(&2 );
s.shrink_to_fit();
assert_eq!(s.capacity(), 0 );
let mut s = HS::new();
s.reserve(0 );
assert_eq!(s.capacity(), 0 );
}
#[ test]
fn test_disjoint() {
let mut xs = LinkedHashSet::new();
let mut ys = LinkedHashSet::new();
assert!(xs.is_disjoint(&ys));
assert!(ys.is_disjoint(&xs));
assert!(xs.insert(5 ));
assert!(ys.insert(11 ));
assert!(xs.is_disjoint(&ys));
assert!(ys.is_disjoint(&xs));
assert!(xs.insert(7 ));
assert!(xs.insert(19 ));
assert!(xs.insert(4 ));
assert!(ys.insert(2 ));
assert!(ys.insert(-11 ));
assert!(xs.is_disjoint(&ys));
assert!(ys.is_disjoint(&xs));
assert!(ys.insert(7 ));
assert!(!xs.is_disjoint(&ys));
assert!(!ys.is_disjoint(&xs));
}
#[ test]
fn test_subset_and_superset() {
let mut a = LinkedHashSet::new();
assert!(a.insert(0 ));
assert!(a.insert(5 ));
assert!(a.insert(11 ));
assert!(a.insert(7 ));
let mut b = LinkedHashSet::new();
assert!(b.insert(0 ));
assert!(b.insert(7 ));
assert!(b.insert(19 ));
assert!(b.insert(250 ));
assert!(b.insert(11 ));
assert!(b.insert(200 ));
assert!(!a.is_subset(&b));
assert!(!a.is_superset(&b));
assert!(!b.is_subset(&a));
assert!(!b.is_superset(&a));
assert!(b.insert(5 ));
assert!(a.is_subset(&b));
assert!(!a.is_superset(&b));
assert!(!b.is_subset(&a));
assert!(b.is_superset(&a));
}
#[ test]
fn test_iterate() {
let mut a = LinkedHashSet::new();
for i in 0 ..32 {
assert!(a.insert(i));
}
let mut observed: u32 = 0 ;
for k in &a {
observed |= 1 << *k;
}
assert_eq!(observed, 0 xFFFF_FFFF);
}
#[ test]
fn test_intersection() {
let mut a = LinkedHashSet::new();
let mut b = LinkedHashSet::new();
assert!(a.insert(11 ));
assert!(a.insert(1 ));
assert!(a.insert(3 ));
assert!(a.insert(77 ));
assert!(a.insert(103 ));
assert!(a.insert(5 ));
assert!(a.insert(-5 ));
assert!(b.insert(2 ));
assert!(b.insert(11 ));
assert!(b.insert(77 ));
assert!(b.insert(-9 ));
assert!(b.insert(-42 ));
assert!(b.insert(5 ));
assert!(b.insert(3 ));
let mut i = 0 ;
let expected = [3 , 5 , 11 , 77 ];
for x in a.intersection(&b) {
assert!(expected.contains(x));
i += 1
}
assert_eq!(i, expected.len());
}
#[ test]
fn test_difference() {
let mut a = LinkedHashSet::new();
let mut b = LinkedHashSet::new();
assert!(a.insert(1 ));
assert!(a.insert(3 ));
assert!(a.insert(5 ));
assert!(a.insert(9 ));
assert!(a.insert(11 ));
assert!(b.insert(3 ));
assert!(b.insert(9 ));
let mut i = 0 ;
let expected = [1 , 5 , 11 ];
for x in a.difference(&b) {
assert!(expected.contains(x));
i += 1
}
assert_eq!(i, expected.len());
}
#[ test]
fn test_symmetric_difference() {
let mut a = LinkedHashSet::new();
let mut b = LinkedHashSet::new();
assert!(a.insert(1 ));
assert!(a.insert(3 ));
assert!(a.insert(5 ));
assert!(a.insert(9 ));
assert!(a.insert(11 ));
assert!(b.insert(-2 ));
assert!(b.insert(3 ));
assert!(b.insert(9 ));
assert!(b.insert(14 ));
assert!(b.insert(22 ));
let mut i = 0 ;
let expected = [-2 , 1 , 5 , 11 , 14 , 22 ];
for x in a.symmetric_difference(&b) {
assert!(expected.contains(x));
i += 1
}
assert_eq!(i, expected.len());
}
#[ test]
fn test_union() {
let mut a = LinkedHashSet::new();
let mut b = LinkedHashSet::new();
assert!(a.insert(1 ));
assert!(a.insert(3 ));
assert!(a.insert(5 ));
assert!(a.insert(9 ));
assert!(a.insert(11 ));
assert!(a.insert(16 ));
assert!(a.insert(19 ));
assert!(a.insert(24 ));
assert!(b.insert(-2 ));
assert!(b.insert(1 ));
assert!(b.insert(5 ));
assert!(b.insert(9 ));
assert!(b.insert(13 ));
assert!(b.insert(19 ));
let mut i = 0 ;
let expected = [-2 , 1 , 3 , 5 , 9 , 11 , 13 , 16 , 19 , 24 ];
for x in a.union(&b) {
assert!(expected.contains(x));
i += 1
}
assert_eq!(i, expected.len());
}
#[ test]
fn test_from_iter() {
let xs = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ];
let set: LinkedHashSet<_> = xs.iter().cloned().collect();
for x in &xs {
assert!(set.contains(x));
}
}
#[ test]
fn test_move_iter() {
let hs = {
let mut hs = LinkedHashSet::new();
hs.insert('a' );
hs.insert('b' );
hs
};
let v = hs.into_iter().collect::<Vec<char>>();
assert!(v == ['a' , 'b' ] || v == ['b' , 'a' ]);
}
#[ test]
fn test_eq() {
let mut s1 = LinkedHashSet::new();
s1.insert(1 );
s1.insert(2 );
s1.insert(3 );
let mut s2 = LinkedHashSet::new();
s2.insert(1 );
s2.insert(2 );
assert!(s1 != s2);
s2.insert(3 );
assert_eq!(s1, s2);
}
#[ test]
fn test_show() {
let mut set = LinkedHashSet::new();
let empty = LinkedHashSet::<i32>::new();
set.insert(1 );
set.insert(2 );
let set_str = format!("{:?}" , set);
assert!(set_str == "{1, 2}" || set_str == "{2, 1}" );
assert_eq!(format!("{:?}" , empty), "{}" );
}
#[ test]
fn test_trivial_drain() {
let mut s = LinkedHashSet::<i32>::new();
for _ in s.drain() {}
assert!(s.is_empty());
drop(s);
let mut s = LinkedHashSet::<i32>::new();
drop(s.drain());
assert!(s.is_empty());
}
#[ test]
fn test_drain() {
let mut s: LinkedHashSet<_> = (1 ..100 ).collect();
for _ in 0 ..20 {
assert_eq!(s.len(), 99 );
{
let mut last_i = 0 ;
let mut d = s.drain();
for (i, x) in d.by_ref().take(50 ).enumerate() {
last_i = i;
assert!(x != 0 );
}
assert_eq!(last_i, 49 );
}
for _ in &s {
panic!("s should be empty!" );
}
s.extend(1 ..100 );
}
}
#[ test]
fn test_replace() {
use core::hash;
#[ derive(Debug)]
struct Foo(&'static str, i32);
impl PartialEq for Foo {
fn eq(&self , other: &Self ) -> bool {
self .0 == other.0
}
}
impl Eq for Foo {}
impl hash::Hash for Foo {
fn hash<H: hash::Hasher>(&self , h: &mut H) {
self .0 .hash(h);
}
}
let mut s = LinkedHashSet::new();
assert_eq!(s.replace(Foo("a" , 1 )), None);
assert_eq!(s.len(), 1 );
assert_eq!(s.replace(Foo("a" , 2 )), Some(Foo("a" , 1 )));
assert_eq!(s.len(), 1 );
let mut it = s.iter();
assert_eq!(it.next(), Some(&Foo("a" , 2 )));
assert_eq!(it.next(), None);
}
#[ test]
fn test_extend_ref() {
let mut a = LinkedHashSet::new();
a.insert(1 );
a.extend(&[2 , 3 , 4 ]);
assert_eq!(a.len(), 4 );
assert!(a.contains(&1 ));
assert!(a.contains(&2 ));
assert!(a.contains(&3 ));
assert!(a.contains(&4 ));
let mut b = LinkedHashSet::new();
b.insert(5 );
b.insert(6 );
a.extend(&b);
assert_eq!(a.len(), 6 );
assert!(a.contains(&1 ));
assert!(a.contains(&2 ));
assert!(a.contains(&3 ));
assert!(a.contains(&4 ));
assert!(a.contains(&5 ));
assert!(a.contains(&6 ));
}
#[ test]
fn test_retain() {
let xs = [1 , 2 , 3 , 4 , 5 , 6 ];
let mut set: LinkedHashSet<i32> = xs.iter().cloned().collect();
set.retain(|&k| k % 2 == 0 );
assert_eq!(set.len(), 3 );
assert!(set.contains(&2 ));
assert!(set.contains(&4 ));
assert!(set.contains(&6 ));
}
#[ test]
fn test_retain_with_order() {
let xs = [1 , 2 , 3 , 4 , 5 , 6 ];
let mut set: LinkedHashSet<i32> = xs.iter().cloned().collect();
let mut vec = Vec::new();
set.retain_with_order(|&k| {
if k % 2 == 0 {
true
} else {
vec.push(k);
false
}
});
assert_eq!(vec![1 , 3 , 5 ], vec);
}
#[ test]
fn insert_order() {
let mut set = LinkedHashSet::new();
set.insert(1 );
set.insert(2 );
set.insert(3 );
set.insert(4 );
assert_eq!(
set.clone().into_iter().collect::<Vec<_>>(),
vec![1 , 2 , 3 , 4 ]
);
assert_eq!(set.into_iter().collect::<Vec<_>>(), vec![1 , 2 , 3 , 4 ]);
}
#[ test]
fn front_back() {
let mut set = LinkedHashSet::new();
set.insert(1 );
set.insert(2 );
set.insert(3 );
set.insert(4 );
assert_eq!(set.front(), Some(&1 ));
assert_eq!(set.back(), Some(&4 ));
assert_eq!(set.pop_back(), Some(4 ));
assert_eq!(set.back(), Some(&3 ));
assert_eq!(set.pop_front(), Some(1 ));
assert_eq!(set.front(), Some(&2 ));
}
#[ test]
fn double_ended_iter() {
let mut set = LinkedHashSet::new();
set.insert(1 );
set.insert(2 );
set.insert(3 );
set.insert(4 );
let mut iter = set.iter();
assert_eq!(iter.next(), Some(&1 ));
assert_eq!(iter.next(), Some(&2 ));
assert_eq!(iter.next_back(), Some(&4 ));
assert_eq!(iter.next_back(), Some(&3 ));
assert_eq!(iter.next_back(), None);
assert_eq!(iter.next(), None);
assert_eq!(iter.next_back(), None);
drop(iter);
let mut iter = set.drain();
assert_eq!(iter.next(), Some(1 ));
assert_eq!(iter.next(), Some(2 ));
assert_eq!(iter.next_back(), Some(4 ));
assert_eq!(iter.next_back(), Some(3 ));
assert_eq!(iter.next_back(), None);
assert_eq!(iter.next(), None);
assert_eq!(iter.next_back(), None);
drop(iter);
set.insert(1 );
set.insert(2 );
set.insert(3 );
set.insert(4 );
let mut iter = set.into_iter();
assert_eq!(iter.next(), Some(1 ));
assert_eq!(iter.next(), Some(2 ));
assert_eq!(iter.next_back(), Some(4 ));
assert_eq!(iter.next_back(), Some(3 ));
assert_eq!(iter.next_back(), None);
assert_eq!(iter.next(), None);
assert_eq!(iter.next_back(), None);
}
#[ test]
fn to_back_front_order() {
let mut set = LinkedHashSet::new();
set.insert(1 );
set.insert(2 );
set.insert(3 );
set.insert(4 );
assert_eq!(set.back().copied(), Some(4 ));
assert_eq!(set.front().copied(), Some(1 ));
set.to_back(&2 );
assert_eq!(set.back().copied(), Some(2 ));
set.to_front(&3 );
assert_eq!(set.front().copied(), Some(3 ));
}
#[ test]
fn test_order_equality() {
let xs = [1 , 2 , 3 , 4 , 5 , 6 ];
let mut set1: LinkedHashSet<i32> = xs.iter().copied().collect();
let mut set2: LinkedHashSet<i32> = xs.iter().copied().collect();
assert_eq!(set1, set2);
set1.to_front(&4 );
assert_ne!(set1, set2);
set2.to_front(&4 );
assert_eq!(set1, set2);
}
Messung V0.5 in Prozent C=90 H=98 G=94
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-23)
¤
*© Formatika GbR, Deutschland