alloc_test/perf/
compare.rs

1use derive_builder::Builder;
2use thiserror::Error;
3
4use crate::threshold::{Threshold, ThresholdError, ThresholdFor};
5
6use super::measure::PerfStats;
7
8#[derive(Debug, Builder)]
9pub struct PerfThresholds {
10    pub mean: Threshold<u64>,
11}
12
13#[derive(Debug, Error)]
14#[error("Performance parameter `{param}`: {error}")]
15pub struct PerfThresholdsError {
16    error: ThresholdError<u64>,
17    param: &'static str,
18}
19
20impl ThresholdFor<PerfStats> for PerfThresholds {
21    type Error = PerfThresholdsError;
22
23    fn check_threshold(&self, value: &PerfStats, ref_value: &PerfStats) -> Result<(), Self::Error> {
24        self.mean
25            .check(&value.mean, &ref_value.mean)
26            .map_err(|error| PerfThresholdsError {
27                error,
28                param: "mean",
29            })
30    }
31}