use commonware_cryptography::bls12381::{dkg, primitives::variant::MinSig};
use commonware_utils::quorum;
use criterion::{criterion_group, BatchSize, Criterion};
use rand::{rngs::StdRng, Rng, SeedableRng};
use std::hint::black_box;
fn benchmark_evaluate_point(c: &mut Criterion) {
for &n in &[5, 10, 20, 50, 100, 250, 500] {
let t = quorum(n);
c.bench_function(&format!("{}/n={} t={}", module_path!(), n, t), |b| {
b.iter_batched(
|| {
let mut rng = StdRng::seed_from_u64(0);
let (polynomial, _) =
dkg::ops::generate_shares::<_, MinSig>(&mut rng, None, n, t);
(rng, polynomial)
},
|(mut rng, polynomial)| {
let idx = rng.gen_range(0..n);
black_box(polynomial.evaluate(idx));
},
BatchSize::SmallInput,
);
});
}
}
criterion_group! {
name = benches;
config = Criterion::default().sample_size(10);
targets = benchmark_evaluate_point
}