1 | // SkFloatingPoint.h |
---|---|
2 | |
3 | use crate::scalar; |
4 | |
5 | #[allow(clippy::eq_op)] |
6 | pub fn is_finite(array: &[scalar]) -> bool { |
7 | let mut prod: f32 = 0.0; |
8 | for x: &f32 in array { |
9 | prod *= x; |
10 | } |
11 | // At this point, `prod` will either be NaN or 0. |
12 | prod == prod |
13 | } |
14 | |
15 | #[cfg(test)] |
16 | mod tests { |
17 | #[test] |
18 | fn is_finite() { |
19 | assert!(!super::is_finite(&[0.0, f32::NAN])); |
20 | assert!(!super::is_finite(&[0.0, f32::INFINITY])); |
21 | assert!(super::is_finite(&[0.0])); |
22 | } |
23 | } |
24 |