use criterion::BenchmarkId; use criterion::Criterion; use criterion::criterion_group; use criterion::criterion_main; use nomo::input::NomoInput; fn parsing_benchmark(c: &mut Criterion) { let mut parsing = c.benchmark_group("Parsing"); for size in [1, 10, 200, 1000] { let mut input = String::new(); for _ in 0..size { input.push_str("{{ if foo }}{{= variable }}{{ end }}"); } let input = NomoInput::from(input); parsing.throughput(criterion::Throughput::Bytes(input.len() as u64)); parsing.bench_with_input(BenchmarkId::from_parameter(size), &input, |b, input| { b.iter(|| nomo::lexer::parse(input.clone()).unwrap()); }); } } fn parsing_nested(c: &mut Criterion) { let mut parsing = c.benchmark_group("Parsing"); for size in [1, 2, 8, 12] { let mut input = String::new(); for _ in 0..size { input = format!( "{{{{ for foo in bar }}}} {input} {{{{ if foo }}}} Hi! {input} {{{{ end }}}} Yooo {{{{ end }}}}" ); } let input = NomoInput::from(input); parsing.throughput(criterion::Throughput::Bytes(input.len() as u64)); parsing.bench_with_input(BenchmarkId::from_parameter(size), &input, |b, input| { b.iter(|| nomo::lexer::parse(input.clone()).unwrap()); }); } } criterion_group!(benches, parsing_benchmark, parsing_nested); criterion_main!(benches);