batpak-bench-support 0.7.0

Criterion benchmark support helpers for batpak.
Documentation
use criterion::measurement::WallTime;
use criterion::{BenchmarkGroup, SamplingMode, Throughput};
use std::time::Duration;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum BenchProfile {
    Quick,
    QuickWarm,
    Heavy,
    Massive,
}

pub fn apply_profile(group: &mut BenchmarkGroup<'_, WallTime>, profile: BenchProfile) {
    group.noise_threshold(0.03);
    group.significance_level(0.05);
    match profile {
        BenchProfile::Quick => {
            group.sample_size(50);
            group.warm_up_time(Duration::from_secs(2));
            group.measurement_time(Duration::from_secs(8));
            group.sampling_mode(SamplingMode::Auto);
        }
        BenchProfile::QuickWarm => {
            group.sample_size(30);
            group.warm_up_time(Duration::from_secs(2));
            group.measurement_time(Duration::from_secs(12));
            group.sampling_mode(SamplingMode::Auto);
        }
        BenchProfile::Heavy => {
            group.sample_size(10);
            group.warm_up_time(Duration::from_secs(3));
            group.measurement_time(Duration::from_secs(30));
            group.sampling_mode(SamplingMode::Flat);
        }
        BenchProfile::Massive => {
            group.sample_size(10);
            group.warm_up_time(Duration::from_secs(3));
            group.measurement_time(Duration::from_secs(120));
            group.sampling_mode(SamplingMode::Flat);
        }
    }
}

pub fn profile_for_event_count(count: u64) -> BenchProfile {
    match count {
        0..=1_000 => BenchProfile::Quick,
        1_001..=10_000 => BenchProfile::Heavy,
        _ => BenchProfile::Massive,
    }
}

pub fn throughput_elements(group: &mut BenchmarkGroup<'_, WallTime>, elements: u64) {
    group.throughput(Throughput::Elements(elements));
}