use criterion::{Criterion, criterion_group, criterion_main};
use rustex_lib::engine::{RusTeXEngine, RusTeXEngineT, Settings};
fn bench_settings() -> Settings {
Settings {
sourcerefs: false,
verbose: false,
log: false,
image_options: Default::default(),
insert_font_info: false,
}
}
fn compile(path: &str) {
let ret = RusTeXEngine::do_file(path, bench_settings());
if let Some((e, _)) = ret.error {
panic!("benchmark input {path} failed to compile: {e}");
}
}
fn bench_compile(c: &mut Criterion) {
let test_tex = concat!(env!("CARGO_MANIFEST_DIR"), "/../test/test.tex");
let macro_loop_tex = concat!(env!("CARGO_MANIFEST_DIR"), "/../test/bench_macroloop.tex");
compile(test_tex);
{
let mut group = c.benchmark_group("simple");
group.sample_size(20);
group.noise_threshold(0.05);
group.significance_level(0.01);
group.measurement_time(std::time::Duration::from_secs(20));
group.bench_function("test.tex", |b| b.iter(|| compile(test_tex)));
}
{
let mut group = c.benchmark_group("loop");
group.sample_size(100);
group.measurement_time(std::time::Duration::from_secs(20));
group.noise_threshold(0.05);
group.significance_level(0.01);
group.bench_function("macro loop", |b| b.iter(|| compile(macro_loop_tex)));
}
}
criterion_group!(benches, bench_compile);
criterion_main!(benches);