use crate::PerfHarness;
#[derive(Debug, Clone)]
pub struct BenchParams {
pub entries: usize,
pub warmup: usize,
pub seed: u64,
}
impl Default for BenchParams {
fn default() -> Self {
Self {
entries: 50_000,
warmup: 5_000,
seed: 0,
}
}
}
pub trait Recipe {
fn name(&self) -> &str;
fn run(&self, h: &mut PerfHarness, params: &BenchParams);
}
pub fn benchmark<R: Recipe + ?Sized>(recipe: &R, params: &BenchParams) -> PerfHarness {
let mut h = PerfHarness::new(recipe.name(), "rust");
h.input("entries", ¶ms.entries.to_string());
h.input("warmup", ¶ms.warmup.to_string());
h.input("seed", ¶ms.seed.to_string());
recipe.run(&mut h, params);
h
}