#[test] fn new() { let set = IndexSet::<String>::new();
println!("{:?}", set);
assert_eq!(set.capacity(), 0);
assert_eq!(set.len(), 0);
assert_eq!(set.is_empty(), true);
}
#[test] fn insert() { let insert = [0, 4, 2, 12, 8, 7, 11, 5]; let not_present = [1, 3, 6, 9, 10]; letmut set = IndexSet::with_capacity(insert.len());
for (i, &elt) in insert.iter().enumerate() {
assert_eq!(set.len(), i);
set.insert(elt);
assert_eq!(set.len(), i + 1);
assert_eq!(set.get(&elt), Some(&elt));
}
println!("{:?}", set);
for &elt in ¬_present {
assert!(set.get(&elt).is_none());
}
}
#[test] fn insert_full() { let insert = vec![9, 2, 7, 1, 4, 6, 13]; let present = vec![1, 6, 2]; letmut set = IndexSet::with_capacity(insert.len());
for (i, &elt) in insert.iter().enumerate() {
assert_eq!(set.len(), i); let (index, success) = set.insert_full(elt);
assert!(success);
assert_eq!(Some(index), set.get_full(&elt).map(|x| x.0));
assert_eq!(set.len(), i + 1);
}
let len = set.len(); for &elt in &present { let (index, success) = set.insert_full(elt);
assert!(!success);
assert_eq!(Some(index), set.get_full(&elt).map(|x| x.0));
assert_eq!(set.len(), len);
}
}
#[test] fn insert_2() { letmut set = IndexSet::with_capacity(16);
for &i in &values { let old_set = set.clone();
set.insert(i); for value in old_set.iter() { if set.get(value).is_none() {
println!("old_set: {:?}", old_set);
println!("set: {:?}", set);
panic!("did not find {} in set", value);
}
}
}
for &i in &values {
assert!(set.get(&i).is_some(), "did not find {}", i);
}
}
assert_eq!(set.iter().count(), set.len());
assert_eq!(set.iter().count(), insert.len()); for (a, b) in insert.iter().zip(set.iter()) {
assert_eq!(a, b);
} for (i, v) in (0..insert.len()).zip(set.iter()) {
assert_eq!(set.get_index(i).unwrap(), v);
}
}
assert_eq!(set.iter().count(), set.len());
assert_eq!(set.iter().count(), insert.len()); for (a, b) in insert.iter().rev().zip(set.iter()) {
assert_eq!(a, b);
} for (i, v) in (0..insert.len()).zip(set.iter()) {
assert_eq!(set.get_index(i).unwrap(), v);
}
// "insert" that moves an existing entry
set.shift_insert(0, insert[0]);
assert_eq!(set.iter().count(), insert.len());
assert_eq!(insert[0], set[0]); for (a, b) in insert[1..].iter().rev().zip(set.iter().skip(1)) {
assert_eq!(a, b);
}
}
#[test] fn replace() { let replace = [0, 4, 2, 12, 8, 7, 11, 5]; let not_present = [1, 3, 6, 9, 10]; letmut set = IndexSet::with_capacity(replace.len());
for (i, &elt) in replace.iter().enumerate() {
assert_eq!(set.len(), i);
set.replace(elt);
assert_eq!(set.len(), i + 1);
assert_eq!(set.get(&elt), Some(&elt));
}
println!("{:?}", set);
for &elt in ¬_present {
assert!(set.get(&elt).is_none());
}
}
#[test] fn replace_full() { let replace = vec![9, 2, 7, 1, 4, 6, 13]; let present = vec![1, 6, 2]; letmut set = IndexSet::with_capacity(replace.len());
for (i, &elt) in replace.iter().enumerate() {
assert_eq!(set.len(), i); let (index, replaced) = set.replace_full(elt);
assert!(replaced.is_none());
assert_eq!(Some(index), set.get_full(&elt).map(|x| x.0));
assert_eq!(set.len(), i + 1);
}
let len = set.len(); for &elt in &present { let (index, replaced) = set.replace_full(elt);
assert_eq!(Some(elt), replaced);
assert_eq!(Some(index), set.get_full(&elt).map(|x| x.0));
assert_eq!(set.len(), len);
}
}
#[test] fn replace_2() { letmut set = IndexSet::with_capacity(16);
for &i in &values { let old_set = set.clone();
set.replace(i); for value in old_set.iter() { if set.get(value).is_none() {
println!("old_set: {:?}", old_set);
println!("set: {:?}", set);
panic!("did not find {} in set", value);
}
}
}
for &i in &values {
assert!(set.get(&i).is_some(), "did not find {}", i);
}
}
assert_eq!(set.iter().count(), set.len());
assert_eq!(set.iter().count(), replace.len()); for (a, b) in replace.iter().zip(set.iter()) {
assert_eq!(a, b);
} for (i, v) in (0..replace.len()).zip(set.iter()) {
assert_eq!(set.get_index(i).unwrap(), v);
}
}
#[test] fn replace_change() { // Check pointers to make sure it really changes letmut set = indexset!(vec![42]); let old_ptr = set[0].as_ptr(); let new = set[0].clone(); let new_ptr = new.as_ptr();
assert_ne!(old_ptr, new_ptr); let replaced = set.replace(new).unwrap();
assert_eq!(replaced.as_ptr(), old_ptr);
}
#[test] fn grow() { let insert = [0, 4, 2, 12, 8, 7, 11]; let not_present = [1, 3, 6, 9, 10]; letmut set = IndexSet::with_capacity(insert.len());
for (i, &elt) in insert.iter().enumerate() {
assert_eq!(set.len(), i);
set.insert(elt);
assert_eq!(set.len(), i + 1);
assert_eq!(set.get(&elt), Some(&elt));
}
println!("{:?}", set); for &elt in &insert {
set.insert(elt * 10);
} for &elt in &insert {
set.insert(elt * 100);
} for (i, &elt) in insert.iter().cycle().enumerate().take(100) {
set.insert(elt * 100 + i as i32);
}
println!("{:?}", set); for &elt in ¬_present {
assert!(set.get(&elt).is_none());
}
}
#[test] fn reserve() { letmut set = IndexSet::<usize>::new();
assert_eq!(set.capacity(), 0);
set.reserve(100); let capacity = set.capacity();
assert!(capacity >= 100); for i in0..capacity {
assert_eq!(set.len(), i);
set.insert(i);
assert_eq!(set.len(), i + 1);
assert_eq!(set.capacity(), capacity);
assert_eq!(set.get(&i), Some(&i));
}
set.insert(capacity);
assert_eq!(set.len(), capacity + 1);
assert!(set.capacity() > capacity);
assert_eq!(set.get(&capacity), Some(&capacity));
}
assert_eq!(set.iter().count(), set.len());
assert_eq!(set.iter().count(), insert.len()); for (a, b) in insert.iter().zip(set.iter()) {
assert_eq!(a, b);
}
let remove_fail = [99, 77]; let remove = [4, 12, 8, 7];
for &value in &remove_fail {
assert!(set.swap_remove_full(&value).is_none());
}
println!("{:?}", set); for &value in &remove { //println!("{:?}", set); let index = set.get_full(&value).unwrap().0;
assert_eq!(set.swap_remove_full(&value), Some((index, value)));
}
println!("{:?}", set);
for value in &insert {
assert_eq!(set.get(value).is_some(), !remove.contains(value));
}
assert_eq!(set.len(), insert.len() - remove.len());
assert_eq!(set.iter().count(), insert.len() - remove.len());
}
// check that the same swap remove sequence on vec and set // have the same result. for &rm in remove_sequence { let out_vec = vector.swap_remove(rm); let out_set = set.swap_remove_index(rm).unwrap();
assert_eq!(out_vec, out_set);
}
assert_eq!(vector.len(), set.len()); for (a, b) in vector.iter().zip(set.iter()) {
assert_eq!(a, b);
}
}
let set_a: IndexSet<_> = (0..3).collect(); let set_b: IndexSet<_> = (3..6).collect(); let set_c: IndexSet<_> = (0..6).collect(); let set_d: IndexSet<_> = (3..9).rev().collect();
#[test] fn test_binary_search_by() { // adapted from std's test for binary_search let b: IndexSet<i32> = [].into();
assert_eq!(b.binary_search_by(|x| x.cmp(&5)), Err(0));
#[test] fn test_binary_search_by_key() { // adapted from std's test for binary_search let b: IndexSet<i32> = [].into();
assert_eq!(b.binary_search_by_key(&5, |&x| x), Err(0));
#[test] fn test_partition_point() { // adapted from std's test for partition_point let b: IndexSet<i32> = [].into();
assert_eq!(b.partition_point(|&x| x < 5), 0);
let b: IndexSet<_> = [4].into();
assert_eq!(b.partition_point(|&x| x < 3), 0);
assert_eq!(b.partition_point(|&x| x < 4), 0);
assert_eq!(b.partition_point(|&x| x < 5), 1);
let b: IndexSet<_> = [1, 2, 4, 6, 8, 9].into();
assert_eq!(b.partition_point(|&x| x < 5), 3);
assert_eq!(b.partition_point(|&x| x < 6), 3);
assert_eq!(b.partition_point(|&x| x < 7), 4);
assert_eq!(b.partition_point(|&x| x < 8), 4);
let b: IndexSet<_> = [1, 2, 4, 5, 6, 8].into();
assert_eq!(b.partition_point(|&x| x < 9), 6);
let b: IndexSet<_> = [1, 2, 4, 6, 7, 8, 9].into();
assert_eq!(b.partition_point(|&x| x < 6), 3);
assert_eq!(b.partition_point(|&x| x < 5), 3);
assert_eq!(b.partition_point(|&x| x < 8), 5);
let b: IndexSet<_> = [1, 2, 4, 5, 6, 8, 9].into();
assert_eq!(b.partition_point(|&x| x < 7), 5);
assert_eq!(b.partition_point(|&x| x < 0), 0);
let b: IndexSet<_> = [1, 3, 3, 3, 7].into();
assert_eq!(b.partition_point(|&x| x < 0), 0);
assert_eq!(b.partition_point(|&x| x < 1), 0);
assert_eq!(b.partition_point(|&x| x < 2), 1);
assert_eq!(b.partition_point(|&x| x < 3), 1);
assert_eq!(b.partition_point(|&x| x < 4), 2); // diff from std as set merges the duplicate keys
assert_eq!(b.partition_point(|&x| x < 5), 2);
assert_eq!(b.partition_point(|&x| x < 6), 2);
assert_eq!(b.partition_point(|&x| x < 7), 2);
assert_eq!(b.partition_point(|&x| x < 8), 3);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet am 2026-06-19)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.