pub fn is_infinite() -> __internal::IsInfiniteMatcher {
__internal::IsInfiniteMatcher
}
pub mod __internal {
use crate::{
description::Description,
matcher::{Describable, Matcher, MatcherResult},
};
use core::fmt::Debug;
use num_traits::float::Float;
#[doc(hidden)]
pub struct IsInfiniteMatcher;
impl<T: Float + Debug> Matcher<T> for IsInfiniteMatcher {
fn matches(&self, actual: &T) -> MatcherResult {
actual.is_infinite().into()
}
}
impl Describable for IsInfiniteMatcher {
fn describe(&self, matcher_result: MatcherResult) -> Description {
if matcher_result.into() { "is infinite" } else { "is finite or NaN" }.into()
}
}
}
#[cfg(test)]
mod tests {
use super::is_infinite;
use crate::prelude::*;
#[test]
fn matches_f32_infinity() -> TestResult<()> {
verify_that!(f32::INFINITY, is_infinite())
}
#[test]
fn does_not_match_f32_number() -> TestResult<()> {
verify_that!(0.0f32, not(is_infinite()))
}
#[test]
fn does_not_match_f32_nan() -> TestResult<()> {
verify_that!(f32::NAN, not(is_infinite()))
}
#[test]
fn matches_f64_infinity() -> TestResult<()> {
verify_that!(f64::INFINITY, is_infinite())
}
#[test]
fn does_not_match_f64_number() -> TestResult<()> {
verify_that!(0.0f64, not(is_infinite()))
}
#[test]
fn does_not_match_f64_nan() -> TestResult<()> {
verify_that!(f64::NAN, not(is_infinite()))
}
}