ferth 0.2.0

A safe, native-sized Forth. no_std compatible.
Documentation
use criterion::{BatchSize, Criterion, criterion_group, criterion_main};
use mlua::Lua;
use std::hint::black_box;

macro_rules! bench {
    ($fn_name:ident, $label:literal, $file:literal, $expr:literal) => {
        fn $fn_name(c: &mut Criterion) {
            c.bench_function($label, |b| {
                b.iter_batched(
                    || {
                        let lua = Lua::new();
                        lua.load(include_str!($file)).exec().unwrap();
                        lua
                    },
                    |lua| lua.load(black_box($expr)).exec().unwrap(),
                    BatchSize::SmallInput,
                )
            });
        }
    };
}

bench!(fib, "lua/fib(20)", "fib.lua", "fib(20)");
bench!(
    rangesum,
    "lua/rangesum(1m)",
    "rangesum.lua",
    "rangesum(1000000)"
);
bench!(sieve, "lua/sieve(100)", "sieve.lua", "sieve(100)");
bench!(deepchain, "lua/deepchain", "deepchain.lua", "f5(0)");
bench!(
    countdown,
    "lua/countdown(60)",
    "countdown.lua",
    "countdown(60)"
);
bench!(
    crc32,
    "lua/crc32(4k)",
    "crc32.lua",
    "crc32(string.rep('\\0', 4096))"
);

criterion_group!(benches, fib, rangesum, sieve, deepchain, countdown, crc32);
criterion_main!(benches);