1#[macro_export]
2macro_rules! assert_eq_tolerance {
3 ($actual:expr, $expected:expr, $tolerance:expr) => {
4 let a = $actual;
5 let e = $expected;
6 let abs_e = if e < 0. { -e } else { e };
7 let t = $tolerance * if abs_e < 1. { 1. } else { abs_e };
8 if (e - a).abs() > t {
9 panic!(
10 "Actual: {}, Expected: {}, Difference: {}, Tolerance: {}.",
11 a,
12 e,
13 a - e,
14 t,
15 );
16 }
17 };
18}
19
20#[macro_export]
21macro_rules! assert_eq_32 {
22 ( $actual:expr, [ $expected1:expr , $expected2:expr , $expected3:expr $(,)? ] ) => {
23 measures::assert_eq_tolerance!($actual[0] as f32, $expected1 as f32, f32::EPSILON * 64.);
24 measures::assert_eq_tolerance!($actual[1] as f32, $expected2 as f32, f32::EPSILON * 64.);
25 measures::assert_eq_tolerance!($actual[2] as f32, $expected3 as f32, f32::EPSILON * 64.);
26 };
27 ( $actual:expr, [ $expected1:expr , $expected2:expr $(,)? ] ) => {
28 measures::assert_eq_tolerance!($actual[0] as f32, $expected1 as f32, f32::EPSILON * 64.);
29 measures::assert_eq_tolerance!($actual[1] as f32, $expected2 as f32, f32::EPSILON * 64.);
30 };
31 ( $actual:expr, $expected:expr ) => {
32 measures::assert_eq_tolerance!($actual as f32, $expected as f32, f32::EPSILON * 64.);
33 };
34}
35
36#[macro_export]
37macro_rules! assert_eq_64 {
38 ( $actual:expr, [ $expected1:expr , $expected2:expr , $expected3:expr $(,)? ] ) => {
39 measures::assert_eq_tolerance!($actual[0] as f64, $expected1 as f64, f64::EPSILON * 64.);
40 measures::assert_eq_tolerance!($actual[1] as f64, $expected2 as f64, f64::EPSILON * 64.);
41 measures::assert_eq_tolerance!($actual[2] as f64, $expected3 as f64, f64::EPSILON * 64.);
42 };
43 ( $actual:expr, [ $expected1:expr , $expected2:expr $(,)? ] ) => {
44 measures::assert_eq_tolerance!($actual[0] as f64, $expected1 as f64, f64::EPSILON * 64.);
45 measures::assert_eq_tolerance!($actual[1] as f64, $expected2 as f64, f64::EPSILON * 64.);
46 };
47 ($actual:expr, $expected:expr) => {
48 measures::assert_eq_tolerance!($actual as f64, $expected as f64, f64::EPSILON * 64.);
49 };
50}