Skip to main content

numeric_statistics/f64/
assert_eq_f64.rs

1/// # Example
2///
3/// ```rust
4/// #[macro_use]
5/// use numeric_statistics::assert_eq_f64;
6/// let a: f64 = 0.33333333333333333;
7/// let b: f64 = 1.0 / 3.0;
8/// assert_eq_f64!(a, b);
9/// ```
10/// 
11#[macro_export]
12macro_rules! assert_eq_f64 {
13    ($a:expr, $b:expr $(,)?) => {{
14        match (&$a, &$b) {
15            (a, b) => {
16                if (a == b) { return; }
17                let epsilon = f64::EPSILON * 2.0;
18                let abs_diff = if (a >= b) { a - b } else { b - a };
19                assert!(
20                    abs_diff <= epsilon,
21                    concat!(
22                        "assertion failed: `assert_eq_f64`\n",
23                        " left: {},\n",
24                        " right: {},\n",
25                        " abs_diff: {},\n",
26                        " ε: {}",
27                    ),
28                    a,
29                    b,
30                    abs_diff,
31                    epsilon
32                )
33            }
34        }
35    }};
36}