mcai_benchmark/report/
statistics.rs1use crate::report::Iteration;
2use serde::Serialize;
3
4#[derive(Clone, Default, Serialize)]
5struct StatsSerie {
6 values: Vec<f64>,
7}
8
9impl StatsSerie {
10 fn new(capacity: usize) -> Self {
11 StatsSerie {
12 values: Vec::with_capacity(capacity),
13 }
14 }
15
16 pub fn push(&mut self, value: f64) {
17 self.values.push(value);
18 }
19}
20
21#[derive(Clone, Default, Serialize)]
23pub struct StatsSummary {
24 q1: StatsSerie,
25 q2: StatsSerie,
26 q3: StatsSerie,
27}
28
29impl StatsSummary {
30 fn new(capacity: usize) -> Self {
31 StatsSummary {
32 q1: StatsSerie::new(capacity),
33 q2: StatsSerie::new(capacity),
34 q3: StatsSerie::new(capacity),
35 }
36 }
37}
38
39impl From<Vec<Iteration>> for StatsSummary {
40 fn from(series: Vec<Iteration>) -> Self {
41 let number_of_iterations = series.len();
42 let number_of_samples = series[0].len();
43
44 let mut summary = StatsSummary::new(number_of_samples);
45
46 for j in 0..number_of_samples {
47 let mut values: Vec<f64> = series.iter().map(|s| s[j]).collect();
48 values.sort_by(|a, b| a.partial_cmp(b).unwrap());
49
50 summary.q1.push(values[number_of_iterations / 4_usize]);
51 summary.q2.push(values[number_of_iterations / 2_usize]);
52 summary.q3.push(values[number_of_iterations / 4 * 3_usize]);
53 }
54 summary
55 }
56}