criterion/
benchmark.rs

1use crate::{PlotConfiguration, SamplingMode};
2use std::time::Duration;
3
4// TODO: Move the benchmark config stuff to a separate module for easier use.
5
6/// Struct containing all of the configuration options for a benchmark.
7pub struct BenchmarkConfig {
8    pub confidence_level: f64,
9    pub measurement_time: Duration,
10    pub noise_threshold: f64,
11    pub nresamples: usize,
12    pub sample_size: usize,
13    pub significance_level: f64,
14    pub warm_up_time: Duration,
15    pub sampling_mode: SamplingMode,
16    pub quick_mode: bool,
17}
18
19/// Struct representing a partially-complete per-benchmark configuration.
20#[derive(Clone, Default)]
21pub(crate) struct PartialBenchmarkConfig {
22    pub(crate) confidence_level: Option<f64>,
23    pub(crate) measurement_time: Option<Duration>,
24    pub(crate) noise_threshold: Option<f64>,
25    pub(crate) nresamples: Option<usize>,
26    pub(crate) sample_size: Option<usize>,
27    pub(crate) significance_level: Option<f64>,
28    pub(crate) warm_up_time: Option<Duration>,
29    pub(crate) sampling_mode: Option<SamplingMode>,
30    pub(crate) quick_mode: Option<bool>,
31    pub(crate) plot_config: PlotConfiguration,
32}
33
34impl PartialBenchmarkConfig {
35    pub(crate) fn to_complete(&self, defaults: &BenchmarkConfig) -> BenchmarkConfig {
36        BenchmarkConfig {
37            confidence_level: self.confidence_level.unwrap_or(defaults.confidence_level),
38            measurement_time: self.measurement_time.unwrap_or(defaults.measurement_time),
39            noise_threshold: self.noise_threshold.unwrap_or(defaults.noise_threshold),
40            nresamples: self.nresamples.unwrap_or(defaults.nresamples),
41            sample_size: self.sample_size.unwrap_or(defaults.sample_size),
42            significance_level: self
43                .significance_level
44                .unwrap_or(defaults.significance_level),
45            warm_up_time: self.warm_up_time.unwrap_or(defaults.warm_up_time),
46            sampling_mode: self.sampling_mode.unwrap_or(defaults.sampling_mode),
47            quick_mode: self.quick_mode.unwrap_or(defaults.quick_mode),
48        }
49    }
50}