macro_rules! assert_approx_eq {
($lhs:expr, $rhs:expr) => { ... };
($lhs:expr, $rhs:expr, rtol <= $rtol:expr) => { ... };
($lhs:expr, $rhs:expr, atol <= $atol:expr) => { ... };
($lhs:expr, $rhs:expr, rtol <= $rtol:expr, atol <= $atol:expr) => { ... };
($lhs:expr, $rhs:expr, atol <= $atol:expr, rtol <= $rtol:expr) => { ... };
}Expand description
Asserts that two values are approximately equal.
This macro is intended for use in tests. If the values are not approximately equal, it panics with a detailed error message showing:
- The left and right values
- The tolerances used
- Which specific fields failed (for composite types)
- The actual difference and effective tolerance for failed comparisons
§Syntax
assert_approx_eq!(left, right) // Default tolerances
assert_approx_eq!(left, right, atol <= tolerance) // Custom absolute tolerance
assert_approx_eq!(left, right, rtol <= tolerance) // Custom relative tolerance
assert_approx_eq!(left, right, atol <= a, rtol <= r) // Both tolerances
assert_approx_eq!(left, right, rtol <= r, atol <= a) // Order doesn't matter§Examples
use lox_test_utils::assert_approx_eq;
// This passes - values are within default tolerance
assert_approx_eq!(1.0, 1.0 + f64::EPSILON);
// Custom tolerance
assert_approx_eq!(1.0, 1.005, atol <= 0.01);
// Works with vectors
use glam::DVec3;
let v1 = DVec3::new(1.0, 2.0, 3.0);
let v2 = DVec3::new(1.0, 2.0, 3.0 + f64::EPSILON);
assert_approx_eq!(v1, v2);§Panics
Panics with a detailed error message if the values are not approximately equal:
ⓘ
use lox_test_utils::assert_approx_eq;
// This will panic with a detailed error message
assert_approx_eq!(1.0, 2.0);§See Also
approx_eq!- For non-panicking boolean checkassert_approx_ne!- For asserting inequality