small-collections 0.6.0

A collection of data structures optimized for small-buffer scenarios that reside on the stack and seamlessly spill to the heap.
Documentation
use criterion::{Criterion, black_box, criterion_group, criterion_main};
use small_collections::SmallBitVec;

fn bench_bitvec(c: &mut Criterion) {
    let n = 64;
    {
        let mut group = c.benchmark_group("BitVec vs SmallBitVec (Push 64)");
        group.bench_function("bitvec::BitVec", |b| {
            b.iter(|| {
                let mut v = bitvec::bitvec![u8, bitvec::prelude::Lsb0; 0; 0];
                for i in 0..n {
                    v.push(black_box(i % 2 == 0));
                }
                v
            })
        });

        group.bench_function("SmallBitVec<8>", |b| {
            b.iter(|| {
                let mut v: SmallBitVec<8> = SmallBitVec::new();
                for i in 0..n {
                    v.push(black_box(i % 2 == 0));
                }
                v
            })
        });
        group.finish();
    }

    {
        let mut group = c.benchmark_group("BitVec vs SmallBitVec (Get 64)");
        let mut v_std = bitvec::bitvec![u8, bitvec::prelude::Lsb0; 0; 0];
        let mut v_small: SmallBitVec<8> = SmallBitVec::new();
        for i in 0..n {
            v_std.push(i % 2 == 0);
            v_small.push(i % 2 == 0);
        }

        group.bench_function("bitvec::BitVec", |b| {
            b.iter(|| {
                for i in 0..n {
                    black_box(v_std.get(black_box(i)));
                }
            })
        });

        group.bench_function("SmallBitVec<8>", |b| {
            b.iter(|| {
                for i in 0..n {
                    black_box(v_small.get(black_box(i)));
                }
            })
        });
        group.finish();
    }
}

criterion_group!(benches, bench_bitvec);
criterion_main!(benches);