thinset 0.4.0

A data structure for sparse sets of unsigned integers that sacrifices space for speed.
Documentation
#[macro_use]
extern crate bencher;

use bencher::{black_box, Bencher};
use rand::{thread_rng, RngCore};
use thinset::SparseSet;

const BITS: usize = 2 << 16;

fn bench_sparse_set(b: &mut Bencher) {
    let mut r = thread_rng();
    b.iter(|| {
        let mut set = SparseSet::with_capacity(BITS);
        for _ in 0..1000 {
            set.insert((r.next_u32() as usize) % BITS);
        }
        for x in set.iter() {
            black_box(x);
        }
    });
}

fn bench_hash_set(b: &mut Bencher) {
    let mut r = thread_rng();
    b.iter(|| {
        let mut set = std::collections::HashSet::new();
        for _ in 0..1000 {
            set.insert((r.next_u32() as usize) % BITS);
        }
        for x in set.iter() {
            black_box(x);
        }
    });
}

fn bench_bit_set(b: &mut Bencher) {
    let mut r = thread_rng();
    b.iter(|| {
        let mut set = bit_set::BitSet::new();
        for _ in 0..1000 {
            set.insert((r.next_u32() as usize) % BITS);
        }
        for x in set.iter() {
            black_box(x);
        }
    });
}

benchmark_group!(benches, bench_sparse_set, bench_hash_set, bench_bit_set);
benchmark_main!(benches);