numeric_statistics/f64/
max.rs1pub fn max<T: AsRef<[f64]>>(values: T) -> f64 {
17 let values = values.as_ref();
18 if values.is_empty() { return f64::NAN; }
19 values.iter().fold(f64::NAN, |a, x| f64::max(a, *x))
20}
21
22#[cfg(test)]
23mod test {
24 use super::*;
25
26 #[test]
27 fn test_empty() {
28 let x: &[f64] = &[];
29 assert!(max(x).is_nan());
30 }
31
32 #[test]
33 fn test_nan() {
34 let x: &[f64] = &[f64::NAN];
35 assert!(max(x).is_nan());
36 }
37
38 #[test]
39 fn test_value() {
40 let x: &[f64] = &[1.0];
41 assert_eq!(max(x), 1.0);
42 }
43
44 #[test]
45 fn test_values_ascending() {
46 let x = &[1.0, 2.0, 3.0];
47 assert_eq!(max(x), 3.0);
48 }
49
50 #[test]
51 fn test_values_ascending_and_nans() {
52 let x = &[1.0, f64::NAN, 2.0, f64::NAN, 3.0];
53 assert_eq!(max(x), 3.0);
54 }
55
56 #[test]
57 fn test_values_descending() {
58 let x = &[3.0, 2.0, 1.0];
59 assert_eq!(max(x), 3.0);
60 }
61
62 #[test]
63 fn test_values_descending_and_nans() {
64 let x = &[3.0, f64::NAN, 2.0, f64::NAN, 1.0];
65 assert_eq!(max(x), 3.0);
66 }
67
68}