use {
core::hint::black_box,
criterion::{Criterion, Throughput, criterion_group, criterion_main},
pbt::Pbt,
};
#[derive(Clone, Debug, Pbt)]
enum LambdaCalculus {
Application(Box<Self>, Box<Self>),
Lambda {
body: Box<Self>,
},
Variable {
de_bruijn: usize,
},
}
fn generate_10_000(criterion: &mut Criterion) {
let mut group = criterion.benchmark_group("lambda_calculus");
let _: &mut _ = group.throughput(Throughput::Elements(10_000));
let _: &mut _ = group.bench_function("generate_10_000", |bencher| {
bencher.iter(|| {
let mut prng = pbt::WyRand::new(42);
let witness = pbt::witness(
|term: &LambdaCalculus| {
black_box(term);
None::<()>
},
10_000,
&mut prng,
);
black_box(witness);
});
});
let () = group.finish();
}
criterion_group!(benches, generate_10_000);
criterion_main!(benches);