Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

isclose   Test StatusCrate VersionRust Version

This crate provides a set of traits and macros for comparing arbitrary types.

The trait IsClose is implemented by default for f32 and f64.

Additional implementations are also hidden behind the following features:

  • half implements IsClose for half's f16 and bf16
  • euclid implements IsClose for euclid's geometric types

Usage:

use isclose::{IsClose, assert_is_close};

// This will fail!
// assert_eq!(0.1 + 0.2, 0.3)

// This will pass
assert!((0.1 + 0.2).is_close(&0.3));

// Equivalent, but gives better error messages
assert_is_close!(0.1 + 0.2, 0.3);

You can also implement IsClose for custom types

use isclose::{IsClose, assert_is_close};
use std::borrow::Borrow;

#[derive(Debug)]
struct Vector { x: f32, y: f32 }

impl IsClose for Vector {
    type Tolerance = f32;
    const ZERO_TOL: f32 = 0.0;

    // Use the same default tolerances as f32
    // You can override the defaults here if necessary
    const ABS_TOL: f32 = <f32 as IsClose>::ABS_TOL;
    const REL_TOL: f32 = <f32 as IsClose>::REL_TOL;

    // The is_close function is the only one that must be implemented
    // to implement IsClose. The other functions will delegate to this one.
    fn is_close_tol(
        &self,
        rhs: &Self,
        rel_tol: &f32,
        abs_tol: &f32,
    ) -> bool {
        self.x.is_close_tol(&rhs.x, rel_tol, abs_tol) &&
            self.y.is_close_tol(&rhs.y, rel_tol, abs_tol)
    }
}

assert_is_close!(
    Vector {
        x: 0.1 + 0.2,
        y: 0.2 + 0.4,
    },
    Vector {
        x: 0.3,
        y: 0.6,
    }
)

Licence

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Traits and macros for comparing arbitrary types for approximate equality

Resources

Stars

Watchers

Forks

Releases

Used by

Contributors

Languages