1// SkFloatingPoint.h
2
3use crate::scalar;
4
5#[allow(clippy::eq_op)]
6pub 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)]
16mod 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