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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// approx_eq!(f32, 15.0, 15.1)
#[macro_export]
macro_rules! approx_eq {
($typ:ty, $lhs:expr, $rhs:expr) => {
{
let m: <$typ as ApproxEq>::Margin = Default::default();
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
($typ:ty, $lhs:expr, $rhs:expr $(, $set:ident = $val:expr)*) => {
{
let m = <$typ as ApproxEq>::Margin::zero()$(.$set($val))*;
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
($typ:ty, $lhs:expr, $rhs:expr, $marg:expr) => {
{
<$typ as ApproxEq>::approx_eq($lhs, $rhs, $marg)
}
};
/*
(f32, $lhs:expr, $rhs:expr, ulps = $ulps:expr) => {
{
let m = F32Margin { epsilon: 0.0, ulps: $ulps };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f32, $lhs:expr, $rhs:expr, epsilon = $epsilon:expr) => {
{
let m = F32Margin { epsilon: $epsilon, ulps: 0 };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f32, $lhs:expr, $rhs:expr, ulps = $ulps:expr, epsilon = $epsilon:expr) => {
{
let m = F32Margin { epsilon: $epsilon, ulps: $ulps };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f32, $lhs:expr, $rhs:expr, epsilon = $epsilon:expr, ulps = $ulps:expr) => {
{
let m = F32Margin { epsilon: $epsilon, ulps: $ulps };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f64, $lhs:expr, $rhs:expr, ulps = $ulps:expr) => {
{
let m = F64Margin { epsilon: 0.0, ulps: $ulps };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f64, $lhs:expr, $rhs:expr, epsilon = $epsilon:expr) => {
{
let m = F64Margin { epsilon: $epsilon, ulps: 0 };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f64, $lhs:expr, $rhs:expr, ulps = $ulps:expr, epsilon = $epsilon:expr) => {
{
let m = F64Margin { epsilon: $epsilon, ulps: $ulps };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
(f64, $lhs:expr, $rhs:expr, epsilon = $epsilon:expr, ulps = $ulps:expr) => {
{
let m = F64Margin { epsilon: $epsilon, ulps: $ulps };
<$typ as ApproxEq>::approx_eq($lhs, $rhs, m)
}
};
*/
}