use criterion::BenchmarkId;
use criterion::Criterion;
use criterion::criterion_group;
use criterion::criterion_main;
use rand::random;
use twenty_first::math::other::random_elements;
use twenty_first::prelude::*;
criterion_main!(benches);
criterion_group!(
name = benches;
config = Criterion::default();
targets = poly_scale<5>,
poly_scale<10>,
poly_scale<15>,
poly_scale<20>,
);
fn poly_scale<const LOG2_SIZE: usize>(c: &mut Criterion) {
let mut group = c.benchmark_group(format!("Scale Polynomials of Degree 2^{LOG2_SIZE}"));
let bfe_poly = Polynomial::<BFieldElement>::new(random_elements((1 << LOG2_SIZE) + 1));
let xfe_poly = Polynomial::<XFieldElement>::new(random_elements((1 << LOG2_SIZE) + 1));
let bfe_scalar: BFieldElement = random();
let xfe_scalar: XFieldElement = random();
group.bench_function(BenchmarkId::new("bfe poly, bfe scalar", LOG2_SIZE), |b| {
b.iter(|| bfe_poly.scale(bfe_scalar))
});
group.bench_function(BenchmarkId::new("bfe poly, xfe scalar", LOG2_SIZE), |b| {
b.iter(|| bfe_poly.scale(xfe_scalar))
});
group.bench_function(BenchmarkId::new("xfe poly, bfe scalar", LOG2_SIZE), |b| {
b.iter(|| xfe_poly.scale(bfe_scalar))
});
group.bench_function(BenchmarkId::new("xfe poly, xfe scalar", LOG2_SIZE), |b| {
b.iter(|| xfe_poly.scale(xfe_scalar))
});
group.finish();
}