fee 0.2.4

Expression evaluator supporting numeric, logical and bitwise operators
Documentation
use std::hint::black_box;

use criterion::{Criterion, criterion_group, criterion_main};
use fee::{
    ConstantResolver, DefaultResolver, EmptyResolver, IndexedResolver, SmallResolver, prelude::*,
};

fn var_resolver(c: &mut Criterion)
{
    c.bench_function("internal/resolver/default", |b| {
        let mut resolver = DefaultResolver::empty();
        
        for i in 0..100 {
            resolver.insert(format!("p{}", i), 2.0);
        }

        b.iter(|| {
            black_box(resolver.resolve("p99").unwrap());
            black_box(resolver.resolve("p50").unwrap());
            black_box(resolver.resolve("p1").unwrap());
        });
    });

    c.bench_function("internal/resolver/indexed", |b| {
        let mut resolver = IndexedResolver::new();
        resolver.add_id('p', 10);
        for i in 0..10 {
            resolver.set('p', i, 2.0);
        }

        b.iter(|| {
            black_box(resolver.resolve("p9").unwrap());
            black_box(resolver.resolve("p5").unwrap());
            black_box(resolver.resolve("p1").unwrap());
        });
    });

    c.bench_function("internal/resolver/small", |b| {
        let mut resolver = SmallResolver::new();
        
        for i in 0..5 {
            resolver.insert(format!("p{}", i), 2.0);
        }

        b.iter(|| {
            black_box(resolver.resolve("p4").unwrap());
            black_box(resolver.resolve("p2").unwrap());
            black_box(resolver.resolve("p0").unwrap());
        });
    });

    c.bench_function("internal/resolver/constant", |b| {
        let resolver = ConstantResolver::new(2.0);

        b.iter(|| {
            black_box(resolver.resolve("p9").unwrap());
            black_box(resolver.resolve("p5").unwrap());
            black_box(resolver.resolve("p1").unwrap());
        });
    });

    c.bench_function("internal/resolver/ptr", |b| {
        let resolver = ConstantResolver::new(2.0);
        let context = Context::new(resolver, EmptyResolver::new()).lock();

        let ptr = context.get_var_ptr("").unwrap();

        b.iter(|| {
            black_box(ptr.get());
            black_box(ptr.get());
            black_box(ptr.get());
        });
    });

    c.bench_function("internal/resolver/rust", |b| {
        let resolver = vec![0.0; 100];

        b.iter(|| {
            black_box(resolver[99]);
            black_box(resolver[50]);
            black_box(resolver[1]);
        });
    });
}

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