Skip to main content

numeric_statistics/f64/
all.rs

1#[derive(Debug, Clone)]
2pub struct All {
3    pub min: f64,
4    pub max: f64,
5    pub average: f64,
6    pub variance: f64,
7    pub standard_deviation: f64,
8}
9
10use crate::f64::{
11    min::*,
12    max::*,
13    average::*,
14    variance::*,
15    standard_deviation::*,
16};
17
18impl All {
19    pub fn new<T: AsRef<[f64]>>(values: T) -> All {
20        let min = min(&values);
21        let max = max(&values);
22        let average = average(&values);
23        let variance = variance_with_average(&values, average);
24        let standard_deviation = standard_deviation_with_variance(variance);
25        All { 
26            min, 
27            max, 
28            average, 
29            variance,
30            standard_deviation  
31        }
32    }
33}
34
35use std::fmt;
36impl fmt::Display for All {
37    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
38        write!(f,
39            concat!(
40                "min: {:?}\n",
41                "max: {:?}\n",
42                "average: {:?}\n",
43                "variance: {:?}\n",
44                "standard deviation: {:?}\n",
45            ),
46            self.min,
47            self.max,
48            self.average,
49            self.variance,
50            self.standard_deviation,
51        )
52    }
53}
54
55#[cfg(test)]
56mod test {
57    use super::*;
58    use crate::assert_eq_f64;
59
60    #[test]
61    fn test_new() {
62        let x = &[1.0, 2.0, 4.0];
63        let all: All = All::new(x);
64        assert_eq!(all.min, 1.0);
65        assert_eq!(all.max, 4.0);
66        assert_eq_f64!(all.average, 2.3333333333333335);
67        assert_eq_f64!(all.variance, 2.3333333333333335);
68        assert_eq_f64!(all.standard_deviation, 1.5275252316519465);
69    }
70
71    #[test]
72    fn test_fmt() {
73        let x = &[1.0, 2.0, 4.0];
74        let all = All::new(x);
75        assert_eq!(
76            all.to_string(),
77            concat!(
78                "min: 1.0\n",
79                "max: 4.0\n",
80                "average: 2.3333333333333335\n",
81                "variance: 2.333333333333333\n",
82                "standard deviation: 1.5275252316519465\n"
83            )
84        );
85    }
86
87}