extern crate criterion;
extern crate thread_local;

use criterion::{black_box, BatchSize};

use thread_local::ThreadLocal;

fn main() {
    let mut c = criterion::Criterion::default().configure_from_args();

    c.bench_function("get", |b| {
        let local = ThreadLocal::new();
        local.get_or(|| Box::new(0));
        b.iter(|| {
            black_box(local.get());
        });
    });

    c.bench_function("insert", |b| {
        b.iter_batched_ref(
            ThreadLocal::new,
            |local| {
                black_box(local.get_or(|| 0));
            },
            BatchSize::SmallInput,
        )
    });
}
