measures/
test_utils.rs

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}