use super::Vector;
use crate::StrError;
pub fn vec_all_finite(v: &Vector, debug: bool) -> Result<(), StrError> {
for i in 0..v.dim() {
if !v[i].is_finite() {
if debug {
println!("found an invalid vector element: v[{}] = {:?}", i, v[i]);
}
return Err("an element of the vector is either infinite or NaN");
}
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::vec_all_finite;
use crate::Vector;
#[test]
fn vec_all_finite_works() {
assert_eq!(vec_all_finite(&Vector::from(&[1.0, 2.0, 3.0]), false).err(), None);
assert_eq!(
vec_all_finite(&Vector::from(&[1.0, f64::NAN, 3.0]), true).err(),
Some("an element of the vector is either infinite or NaN")
);
assert_eq!(
vec_all_finite(&Vector::from(&[1.0, 2.0, f64::INFINITY]), true).err(),
Some("an element of the vector is either infinite or NaN")
);
assert_eq!(
vec_all_finite(&Vector::from(&[1.0, 2.0, f64::NEG_INFINITY]), true).err(),
Some("an element of the vector is either infinite or NaN")
);
}
}