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}