Skip to content

Commit 3f6454b

Browse files
authored
Merge pull request #101 from jonaspleyer/debug-macros
Add Debug macros
2 parents 46a595e + 5f367f4 commit 3f6454b

File tree

4 files changed

+109
-0
lines changed

4 files changed

+109
-0
lines changed

approx/src/macros.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,64 @@ macro_rules! assert_ulps_ne {
183183
__assert_approx!(ulps_ne, $given, $expected $(, $opt = $val)*)
184184
};
185185
}
186+
187+
macro_rules! make_debug (
188+
($new_name:ident, $macro_name:ident) => {make_debug!($new_name, $macro_name, $);};
189+
($new_name:ident, $macro_name:ident, $dol:tt) => {
190+
/// Debug version of [`
191+
#[doc = stringify!($macro_name)]
192+
/// `].
193+
///
194+
/// This macro is only active when the `cfg!(debug_assertions)` criterion is met.
195+
/// This is usually the case when libraries are compiled in debug or release mode.
196+
/// This macro will return `true` when `cfg!(debug_assertions)` is not active.
197+
///
198+
/// ```text
199+
/// if cfg!(debug_assertions) {
200+
/// // .. run macro
201+
/// } else {
202+
/// true
203+
/// }
204+
/// ```
205+
#[macro_export]
206+
macro_rules! $new_name {
207+
($dol($to:tt)*) => {if cfg!(debug_assertions) {$macro_name!($dol($to)*)} else {true}}
208+
}
209+
};
210+
(@assert $new_name:ident, $macro_name:ident) => {make_debug!(@assert $new_name, $macro_name, $);};
211+
(@assert $new_name:ident, $macro_name:ident, $dol:tt) => {
212+
/// Debug version of [`
213+
#[doc = stringify!($macro_name)]
214+
/// `]
215+
///
216+
/// This macro is only active when the `cfg!(debug_assertions)` criterion is met.
217+
/// This is usually the case when libraries are compiled in debug or release mode.
218+
/// This macro never panic when `cfg!(debug_assertions)` is not active.
219+
///
220+
/// ```text
221+
/// if cfg!(debug_assertions) {
222+
/// // .. run macro with assertion
223+
/// }
224+
/// ```
225+
#[macro_export]
226+
macro_rules! $new_name {
227+
($dol($to:tt)*) => {if cfg!(debug_assertions) {$macro_name!($dol($to)*)}}
228+
}
229+
230+
};
231+
);
232+
233+
make_debug!(debug_abs_diff_eq, abs_diff_eq);
234+
make_debug!(debug_abs_diff_ne, abs_diff_ne);
235+
make_debug!(@assert debug_assert_abs_diff_eq, assert_abs_diff_eq);
236+
make_debug!(@assert debug_assert_abs_diff_ne, assert_abs_diff_ne);
237+
238+
make_debug!(debug_relative_eq, relative_eq);
239+
make_debug!(debug_relative_ne, relative_ne);
240+
make_debug!(@assert debug_assert_relative_eq, assert_relative_eq);
241+
make_debug!(@assert debug_assert_relative_ne, assert_relative_ne);
242+
243+
make_debug!(debug_ulps_eq, ulps_eq);
244+
make_debug!(debug_ulps_ne, ulps_ne);
245+
make_debug!(@assert debug_assert_ulps_eq, assert_ulps_eq);
246+
make_debug!(@assert debug_assert_ulps_ne, assert_ulps_ne);

approx/tests/abs_diff_eq.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,3 +681,18 @@ mod test_indexmap {
681681
);
682682
}
683683
}
684+
685+
#[test]
686+
fn test_debug_abs_diff() {
687+
let x = 1.0;
688+
let y = if cfg!(debug_assertions) { 1.1 } else { 2.0 };
689+
assert!(debug_abs_diff_eq!(x, y, epsilon = 0.15));
690+
debug_assert_abs_diff_eq!(x, y, epsilon = 0.15);
691+
692+
let x = 50798.34f32;
693+
let y = 29580.13f32;
694+
let epsilon = if cfg!(debug_assertions) { 0.0 } else { 2.2e4 };
695+
696+
assert!(debug_abs_diff_ne!(x, y, epsilon = epsilon));
697+
debug_assert_abs_diff_ne!(x, y, epsilon = epsilon);
698+
}

approx/tests/relative_eq.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,3 +703,19 @@ mod test_indexmap {
703703
);
704704
}
705705
}
706+
707+
#[test]
708+
fn test_debug_relative_diff() {
709+
let x = 10.0;
710+
let y = if cfg!(debug_assertions) { 11.1 } else { 2.0 };
711+
712+
debug_assert_relative_eq!(x, y, max_relative = 0.15);
713+
assert!(debug_relative_eq!(x, y, max_relative = 0.15));
714+
715+
let x = 249587e-3;
716+
let y = 248938e-3;
717+
let max_relative = if cfg!(debug_assertions) { 0.0 } else { 1.0 };
718+
719+
debug_assert_relative_ne!(x, y, max_relative = max_relative);
720+
assert!(debug_relative_ne!(x, y, max_relative = max_relative));
721+
}

approx/tests/ulps_eq.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,3 +658,20 @@ mod test_indexmap {
658658
);
659659
}
660660
}
661+
662+
#[test]
663+
fn test_debug_ulps_diff() {
664+
let x = 83055.0;
665+
let y = 83055.2;
666+
let m = if cfg!(debug_assertions) { 3 } else { 0 };
667+
668+
debug_assert_ulps_ne!(x, y, max_ulps = m);
669+
assert!(debug_ulps_ne!(x, y, max_ulps = m));
670+
671+
let x = 50798.34f32;
672+
let y = 50798.13f32;
673+
let m = if cfg!(debug_assertions) { 55 } else { 0 };
674+
675+
assert!(debug_ulps_eq!(x, y, max_ulps = m));
676+
debug_assert_ulps_eq!(x, y, max_ulps = m);
677+
}

0 commit comments

Comments
 (0)