extern crate num_traits;
use num_traits::Float;
use ::{FloatChecker, NoisyFloat};
pub struct NumChecker;
impl<F: Float> FloatChecker<F> for NumChecker {
#[inline]
fn assert(value: F) {
debug_assert!(Self::check(value), "unexpected NaN");
}
#[inline]
fn check(value: F) -> bool {
!value.is_nan()
}
}
pub struct FiniteChecker;
impl<F: Float> FloatChecker<F> for FiniteChecker {
#[inline]
fn assert(value: F) {
debug_assert!(Self::check(value), "unexpected NaN or infinity");
}
#[inline]
fn check(value: F) -> bool {
value.is_finite()
}
}
impl<F: Float> From<NoisyFloat<F, FiniteChecker>> for NoisyFloat<F, NumChecker> {
fn from(value: NoisyFloat<F, FiniteChecker>) -> Self {
Self::unchecked_new(value.raw())
}
}