Documentation
use bumpalo::Bump;
use criterion::*;
use kes::parser::parse;

pub fn throughput_short_bench(c: &mut Criterion) {
    let input = "1 2 3 4 5 6 7 8 9 '1' '2' '3' '4' '5' '6' '7' '8' '9' 정리";
    let mut group = c.benchmark_group("throughput-short");
    group.throughput(Throughput::Bytes(input.len() as u64));
    group.bench_with_input("parse", &input, |b, i| {
        let mut bump = Bump::with_capacity(8196);
        b.iter(|| {
            let insts = parse(&bump, i).unwrap();
            assert!(!insts.is_empty());
            drop(insts);
            bump.reset();
        });
    });
}

pub fn throughput_long_bench(c: &mut Criterion) {
    let input = "1 2 + [$1] $1 { 123 } 그외 { 선택 $1 { 2 { } 그외 { } } }".repeat(100);

    let mut group = c.benchmark_group("throughput-long");
    group.throughput(Throughput::Bytes(input.len() as u64));
    group.bench_with_input("parse", &input, |b, i| {
        let mut bump = Bump::with_capacity(1024 * 1024);
        b.iter(|| {
            let insts = parse(&bump, i).unwrap();
            assert!(!insts.is_empty());
            drop(insts);
            bump.reset();
        });
    });
}

criterion_group!(benches, throughput_short_bench, throughput_long_bench);
criterion_main!(benches);