diff --git a/strong-type-derive/src/detail/nan.rs b/strong-type-derive/src/detail/nan.rs index a87a43d..f389cea 100644 --- a/strong-type-derive/src/detail/nan.rs +++ b/strong-type-derive/src/detail/nan.rs @@ -6,9 +6,13 @@ pub(crate) fn implement_nan(name: &syn::Ident, value_type: &syn::Ident) -> Token impl #name { pub const NAN: Self = Self(#value_type::NAN); - fn is_nan(&self) -> bool { + pub fn is_nan(&self) -> bool { self.0.is_nan() } + + pub fn is_finite(&self) -> bool { + self.0.is_finite() + } } } } diff --git a/strong-type-tests/tests/strong_type.rs b/strong-type-tests/tests/strong_type.rs index d111db2..9059395 100644 --- a/strong-type-tests/tests/strong_type.rs +++ b/strong-type-tests/tests/strong_type.rs @@ -217,17 +217,29 @@ mod tests { } #[test] - fn test_float_nan() { + fn test_float_nan_and_infinity() { #[derive(StrongType)] struct Meter(f64); let y = Meter::NAN; assert!(y.is_nan()); assert!(y.value().is_nan()); + assert!(!y.is_finite()); - let z = Meter(0.0); + let z = Meter::new(0.0); assert!(!z.is_nan()); assert!(!z.value().is_nan()); + assert!(z.is_finite()); + + let w = Meter::INFINITY; + assert!(!w.is_nan()); + assert!(!w.value().is_nan()); + assert!(!w.is_finite()); + + let u = Meter::NEG_INFINITY; + assert!(!u.is_nan()); + assert!(!u.value().is_nan()); + assert!(!u.is_finite()); } #[test]