1#[macro_export]
17macro_rules! abs_diff_eq {
18 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*) => {
19 $crate::AbsDiff::default()$(.$opt($val))*.eq(&$lhs, &$rhs)
20 };
21 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*,) => {
22 $crate::AbsDiff::default()$(.$opt($val))*.eq(&$lhs, &$rhs)
23 };
24}
25
26#[macro_export]
28macro_rules! abs_diff_ne {
29 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*) => {
30 $crate::AbsDiff::default()$(.$opt($val))*.ne(&$lhs, &$rhs)
31 };
32 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*,) => {
33 $crate::AbsDiff::default()$(.$opt($val))*.ne(&$lhs, &$rhs)
34 };
35}
36
37#[macro_export]
39macro_rules! relative_eq {
40 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*) => {
41 $crate::Relative::default()$(.$opt($val))*.eq(&$lhs, &$rhs)
42 };
43 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*,) => {
44 $crate::Relative::default()$(.$opt($val))*.eq(&$lhs, &$rhs)
45 };
46}
47
48#[macro_export]
50macro_rules! relative_ne {
51 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*) => {
52 $crate::Relative::default()$(.$opt($val))*.ne(&$lhs, &$rhs)
53 };
54 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*,) => {
55 $crate::Relative::default()$(.$opt($val))*.ne(&$lhs, &$rhs)
56 };
57}
58
59#[macro_export]
61macro_rules! ulps_eq {
62 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*) => {
63 $crate::Ulps::default()$(.$opt($val))*.eq(&$lhs, &$rhs)
64 };
65 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*,) => {
66 $crate::Ulps::default()$(.$opt($val))*.eq(&$lhs, &$rhs)
67 };
68}
69
70#[macro_export]
72macro_rules! ulps_ne {
73 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*) => {
74 $crate::Ulps::default()$(.$opt($val))*.ne(&$lhs, &$rhs)
75 };
76 ($lhs:expr, $rhs:expr $(, $opt:ident = $val:expr)*,) => {
77 $crate::Ulps::default()$(.$opt($val))*.ne(&$lhs, &$rhs)
78 };
79}
80
81#[doc(hidden)]
82#[macro_export]
83macro_rules! __assert_approx {
84 ($eq:ident, $given:expr, $expected:expr) => {{
85 match (&($given), &($expected)) {
86 (given, expected) => assert!(
87 $eq!(*given, *expected),
88"assert_{}!({}, {})
89
90 left = {:?}
91 right = {:?}
92
93",
94 stringify!($eq),
95 stringify!($given),
96 stringify!($expected),
97 given, expected,
98 ),
99 }
100 }};
101 ($eq:ident, $given:expr, $expected:expr, $($opt:ident = $val:expr),+) => {{
102 match (&($given), &($expected)) {
103 (given, expected) => assert!(
104 $eq!(*given, *expected, $($opt = $val),+),
105"assert_{}!({}, {}, {})
106
107 left = {:?}
108 right = {:?}
109
110",
111 stringify!($eq),
112 stringify!($given),
113 stringify!($expected),
114 stringify!($($opt = $val),+),
115 given, expected,
116 ),
117 }
118 }};
119}
120
121#[macro_export(local_inner_macros)]
123macro_rules! assert_abs_diff_eq {
124 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*) => {
125 __assert_approx!(abs_diff_eq, $given, $expected $(, $opt = $val)*)
126 };
127 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*,) => {
128 __assert_approx!(abs_diff_eq, $given, $expected $(, $opt = $val)*)
129 };
130}
131
132#[macro_export(local_inner_macros)]
134macro_rules! assert_abs_diff_ne {
135 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*) => {
136 __assert_approx!(abs_diff_ne, $given, $expected $(, $opt = $val)*)
137 };
138 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*,) => {
139 __assert_approx!(abs_diff_ne, $given, $expected $(, $opt = $val)*)
140 };
141}
142
143#[macro_export(local_inner_macros)]
145macro_rules! assert_relative_eq {
146 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*) => {
147 __assert_approx!(relative_eq, $given, $expected $(, $opt = $val)*)
148 };
149 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*,) => {
150 __assert_approx!(relative_eq, $given, $expected $(, $opt = $val)*)
151 };
152}
153
154#[macro_export(local_inner_macros)]
156macro_rules! assert_relative_ne {
157 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*) => {
158 __assert_approx!(relative_ne, $given, $expected $(, $opt = $val)*)
159 };
160 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*,) => {
161 __assert_approx!(relative_ne, $given, $expected $(, $opt = $val)*)
162 };
163}
164
165#[macro_export(local_inner_macros)]
167macro_rules! assert_ulps_eq {
168 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*) => {
169 __assert_approx!(ulps_eq, $given, $expected $(, $opt = $val)*)
170 };
171 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*,) => {
172 __assert_approx!(ulps_eq, $given, $expected $(, $opt = $val)*)
173 };
174}
175
176#[macro_export(local_inner_macros)]
178macro_rules! assert_ulps_ne {
179 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*) => {
180 __assert_approx!(ulps_ne, $given, $expected $(, $opt = $val)*)
181 };
182 ($given:expr, $expected:expr $(, $opt:ident = $val:expr)*,) => {
183 __assert_approx!(ulps_ne, $given, $expected $(, $opt = $val)*)
184 };
185}