1#[macro_export]
12macro_rules! assert_eq_eps {
13 ($left:expr, $right:expr, $eps:expr) => {
14 match (&$left, &$right) {
15 (left_val, right_val) => {
16 let delta = (*left_val - *right_val).abs();
17 if !(delta <= $eps) {
18 panic!(
19 "Assertion failed, {} - {} = {} > {} (error: {})",
20 &*left_val,
21 &*right_val,
22 delta,
23 $eps,
24 delta - $eps
25 )
26 }
27 }
28 }
29 };
30 ($left:expr, $right:expr, $eps:expr, $($arg:expr)?) => {
31 match (&$left, &$right) {
32 (left_val, right_val) => {
33 let delta = (*left_val - *right_val).abs();
34 if !(delta <= $eps) {
35 panic!(
36 "{}: Assertion failed, {} - {} = {} > {} (error: {})",
37 &*left_val,
38 &*right_val,
39 delta,
40 $eps,
41 delta - $eps,
42 $($arg)?
43 )
44 }
45 }
46 }
47 };
48}
49#[macro_export]
50macro_rules! debug_assert_eq_eps {
51 ($left:expr, $right:expr, $eps:expr) => {
52 if cfg!(debug_assertions) {
53 $crate::assert_eq_eps!($left, $right, $eps)
54 }
55 };
56}
57#[macro_export]
60macro_rules! assert_eq_eps_slice {
61 ($left:expr, $right:expr, $eps:expr) => {
62 match (&$left, &$right) {
63 (left_val, right_val) => {
64 let left_len = left_val.len();
65 let right_len = right_val.len();
66 if left_len != right_len {
67 panic!("Assertion failed, left len ({left_len}) != right len ({right_len})");
68 }
69 for idx in 0..left_len {
70 let lv = left_val[idx];
71 let rv = right_val[idx];
72 let delta = (lv - rv).abs();
73 if !(delta <= $eps) {
74 panic!(
75 "Assertion failed, {} - {} = {} > {} at index {idx}",
76 &lv, &rv, delta, $eps
77 )
78 }
79 }
80 }
81 }
82 };
83 ($left:expr, $right:expr, $eps:expr, $($arg:expr)?) => {
84 match (&$left, &$right) {
85 (left_val, right_val) => {
86 let left_len = left_val.len();
87 let right_len = right_val.len();
88 if left_len != right_len {
89 panic!("{}: Assertion failed, left len ({left_len}) != right len ({right_len})", $($arg)?);
90 }
91 for idx in 0..left_len {
92 let lv = left_val[idx];
93 let rv = right_val[idx];
94 let delta = (lv - rv).abs();
95 if !(delta <= $eps) {
96 panic!(
97 "{}: Assertion failed, {} - {} = {} > {} at index {idx}",
98 &lv, &rv, delta, $eps, $($arg)?
99 )
100 }
101 }
102 }
103 }
104 };
105}
106
107#[macro_export]
110macro_rules! assert_eq_hex {
111 ($left:expr, $right:expr) => {
112 match (&$left, &$right) {
113 (left_val, right_val) => {
114 if *left_val != *right_val {
115 panic!(
116 "Assertion failed, 0x{:0X} != 0x{:0X}",
117 &*left_val, &*right_val
118 )
119 }
120 }
121 }
122 };
123 ($left:expr, $right:expr, $($arg:expr)?) => {
124 match (&$left, &$right) {
125 (left_val, right_val) => {
126 if *left_val != *right_val {
127 panic!(
128 "{}: Assertion failed, 0x{:0X} != 0x{:0X}",
129 &*left_val, &*right_val, $($arg)?
130 )
131 }
132 }
133 }
134 };
135}
136
137#[macro_export]
140macro_rules! assert_eq_hex_slice {
141 ($left:expr, $right:expr) => {
142 match (&$left, &$right) {
143 (left_val, right_val) => {
144 let left_len = left_val.len();
145 let right_len = right_val.len();
146 if left_len != right_len {
147 panic!("Assertion failed, left len (0x{left_len:0X}) != right len (0x{right_len:0X})");
148 }
149 for idx in 0..left_len {
150 let lv = left_val[idx];
151 let rv = right_val[idx];
152 if lv != rv {
153 panic!(
154 "Assertion failed, 0x{lv:0X} != 0x{rv:0X} at idx {idx}"
155 )
156 }
157 }
158 }
159 }
160 };
161 ($left:expr, $right:expr, $($arg:expr)?) => {
162 match (&$left, &$right) {
163 (left_val, right_val) => {
164 let left_len = left_val.len();
165 let right_len = right_val.len();
166 if left_len != right_len {
167 panic!("{}: Assertion failed, left len (0x{left_len:0X}) != right len (0x{right_len:0X})", $($arg)+);
168 }
169 for idx in 0..left_len {
170 let lv = left_val[idx];
171 let rv = right_val[idx];
172 if lv != rv {
173 panic!(
174 "{}: Assertion failed, 0x{lv:0X} != 0x{rv:0X} at idx {idx}", $($arg)+
175 )
176 }
177 }
178 }
179 }
180 }
181 ;
182}