1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
pub trait AlmostEqual {
fn almost_equal(&self, other: &Self) -> bool;
}
#[macro_export]
macro_rules! assert_almost_eq {
($left:expr, $right:expr) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !((*left_val).almost_equal(right_val)) {
panic!(r#"assertion failed: `(left.almost_equal(right))`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val)
}
}
}
});
($left:expr, $right:expr,) => ({
assert_almost_eq!($left, $right)
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !((*left_val).almost_equal(right_val)) {
panic!(r#"assertion failed: `(left.almost_equal(right))`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
format_args!($($arg)+))
}
}
}
});
}