numeric_statistics/f64/
all.rs1#[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}