#![feature(test)] extern crate test; use toolshed::set::{BloomSet, Set}; use toolshed::Arena; use test::{Bencher, black_box}; use std::collections::HashSet; use rustc_hash::FxHashSet; static WORDS: &[&str] = &[ "ARENA_BLOCK", "Arena", "Cell", "Self", "String", "T", "Vec", "_unchecked", "a", "alignment", "alloc", "alloc_bytes", "alloc_str", "alloc_str_zero_end", "alloc_string", "as", "as_bytes", "as_mut_ptr", "as_ptr", "block", "cap", "cell", "const", "copy_nonoverlapping", "else", "extend_from_slice", "fn", "from_raw_parts", "from_utf", "get", "grow", "if", "impl", "inline", "into", "into_bytes", "isize", "len", "len_with_zero", "let", "mem", "mut", "new", "offset", "ptr", "pub", "push", "replace", "return", "self", "set", "size_of", "slice", "std", "store", "str", "struct", "temp", "u", "unsafe", "use", "usize", "val", "vec", "with_capacity" ]; static SET_WORDS: &[&str] = &["alloc_bytes", "alloc", "Cell", "String", "yetAnother"]; #[bench] fn set_read(b: &mut Bencher) { let arena = Arena::new(); let a = &arena; let set = Set::new(); for word in SET_WORDS.iter() { set.insert(a, *word); } b.iter(|| { for word in WORDS.iter() { black_box(set.contains(word)); } }) } #[bench] fn set_create(b: &mut Bencher) { let arena = Arena::new(); let a = &arena; b.iter(|| { unsafe { a.clear() }; let set = Set::new(); for word in SET_WORDS.iter() { set.insert(a, *word); } black_box(set) }) } #[bench] fn bloom_set_read(b: &mut Bencher) { let arena = Arena::new(); let a = &arena; let set = BloomSet::new(); for word in SET_WORDS.iter() { set.insert(a, *word); } b.iter(|| { for word in WORDS.iter() { black_box(set.contains(word)); } }) } #[bench] fn bloom_set_create(b: &mut Bencher) { let arena = Arena::new(); let a = &arena; b.iter(|| { unsafe { a.clear() }; let set = BloomSet::new(); for word in SET_WORDS.iter() { set.insert(a, *word); } black_box(set) }) } #[bench] fn fxhash_set_read(b: &mut Bencher) { let mut set = FxHashSet::default(); for word in SET_WORDS.iter() { set.insert(*word); } b.iter(|| { for word in WORDS.iter() { black_box(set.contains(word)); } }) } #[bench] fn fxhash_set_create(b: &mut Bencher) { b.iter(|| { let mut set = FxHashSet::default(); for word in SET_WORDS.iter() { set.insert(*word); } black_box(set) }) } #[bench] fn hash_set_read(b: &mut Bencher) { let mut set = HashSet::new(); for word in SET_WORDS.iter() { set.insert(*word); } b.iter(|| { for word in WORDS.iter() { black_box(set.contains(word)); } }) } #[bench] fn hash_set_create(b: &mut Bencher) { b.iter(|| { let mut set = HashSet::new(); for word in SET_WORDS.iter() { set.insert(*word); } black_box(set) }) }