icentral_stats/
simple_stats.rs

1crate::ix!();
2
3//-------------------------------------------[icentral/src/utility.cc]
4//-------------------------------------------[icentral/src/experiments.h]
5#[derive(Debug)]
6pub struct SimpleStats {
7    pub mean:   Duration,
8    pub stddev: Duration,
9    pub median: Duration,
10    pub min:    Duration,
11    pub max:    Duration,
12}
13
14impl From<&mut Vec<Duration>> for SimpleStats {
15
16    fn from(x: &mut Vec<Duration>) -> Self {
17
18        //x.sort_by(|a,b| FloatOrd(*a).cmp(&FloatOrd(*b)));
19        x.sort();
20
21        let n = x.len();
22
23        let min = x[0];
24        let max = *x.iter().last().unwrap();
25
26        let sum: Duration = x.iter().sum();
27
28        let mean   = sum / n as u32;
29        let median = x[n / 2];
30
31        let mut sum_2: f64 = 0.0;
32
33        for i in 0..n {
34
35            sum_2 += {
36
37                let t0 = x[i] - mean;
38                let t1 = x[i] - mean;
39
40                t0.as_secs_f64() * t1.as_secs_f64()
41            };
42        }
43
44        let stddev = Duration::from_secs_f64((sum_2 / n as f64).sqrt());
45
46        Self { min, max, mean, median, stddev }
47    }
48}
49
50
51