diff --git a/Cargo.toml b/Cargo.toml index f09fc66..d6901d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,10 @@ bench = false name = "batch" harness = false +[[bench]] +name = "gaussian" +harness = false + [dependencies] approx = { version = "0.5.1", optional = true } diff --git a/benches/gaussian.rs b/benches/gaussian.rs new file mode 100644 index 0000000..133933b --- /dev/null +++ b/benches/gaussian.rs @@ -0,0 +1,50 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use trueskill_tt::gaussian::Gaussian; + +fn benchmark_gaussian_arithmetic(criterion: &mut Criterion) { + // Define test Gaussians + let g1 = Gaussian::from_ms(25.0, 25.0 / 3.0); + let g2 = Gaussian::from_ms(0.0, 1.0); + let g3 = Gaussian::from_ms(1.0, 1.0); + + // Benchmark addition + criterion.bench_function("Gaussian::add", |bencher| { + bencher.iter(|| g1 + g2); + }); + + // Benchmark subtraction + criterion.bench_function("Gaussian::sub", |bencher| { + bencher.iter(|| g1 - g3); + }); + + // Benchmark multiplication + criterion.bench_function("Gaussian::mul", |bencher| { + bencher.iter(|| g1 * g2); + }); + + // Benchmark division + criterion.bench_function("Gaussian::div", |bencher| { + bencher.iter(|| g1 / g2); + }); + + // Benchmark natural parameter conversions + criterion.bench_function("Gaussian::pi", |bencher| { + bencher.iter(|| g1.pi()); + }); + + criterion.bench_function("Gaussian::tau", |bencher| { + bencher.iter(|| g1.tau()); + }); + + // Benchmark combined pi/tau operations (used in mul/div) + criterion.bench_function("Gaussian::pi_tau_combined", |bencher| { + bencher.iter(|| { + let pi = g1.pi(); + let tau = g1.tau(); + (pi, tau) + }); + }); +} + +criterion_group!(benches, benchmark_gaussian_arithmetic); +criterion_main!(benches);