1#[rustfmt::skip]
2macro_rules! impl_bin_assert {
3 ($name: ident, $pred: tt, $dollar: tt) => {
4 #[macro_export]
5 macro_rules! $name {
6 ($lhs: expr, $rhs: expr $dollar(, $desc: literal)? ) => {{
7 let __cvlr_lhs = $lhs;
8 let __cvlr_rhs = $rhs;
9 cvlr::log::log_scope_start("assert");
10 cvlr::clog!(stringify!($lhs $pred $rhs) => "_");
11 cvlr::clog!(__cvlr_lhs => stringify!($lhs));
12 cvlr::clog!(__cvlr_rhs => stringify!($rhs));
13 cvlr::log::log_scope_end("assert");
14 $crate::cvlr_assert!(__cvlr_lhs $pred __cvlr_rhs);
15 }};
16 }
17 pub use $name;
18 };
19}
20
21impl_bin_assert!(cvlr_assert_eq, ==, $);
22impl_bin_assert!(cvlr_assert_ne, !=, $);
23impl_bin_assert!(cvlr_assert_le, <=, $);
24impl_bin_assert!(cvlr_assert_lt, <, $);
25impl_bin_assert!(cvlr_assert_ge, >=, $);
26impl_bin_assert!(cvlr_assert_gt, >, $);
27
28#[rustfmt::skip]
29macro_rules! impl_bin_assume {
30 ($name: ident, $pred: tt, $dollar: tt) => {
31 #[macro_export]
32 macro_rules! $name {
33 ($lhs: expr, $rhs: expr $dollar(, $desc: literal)? ) => {{
34 let __cvlr_lhs = $lhs;
35 let __cvlr_rhs = $rhs;
36 cvlr::log::log_scope_start("assume");
37 cvlr::clog!(stringify!($lhs $pred $rhs) => "_");
38 cvlr::clog!(__cvlr_lhs => stringify!($lhs));
39 cvlr::clog!(__cvlr_rhs => stringify!($rhs));
40 cvlr::log::log_scope_end("assume");
41 $crate::cvlr_assume!(__cvlr_lhs $pred __cvlr_rhs);
42 }};
43 }
44 pub use $name;
45 };
46}
47
48impl_bin_assume!(cvlr_assume_eq, ==, $);
49impl_bin_assume!(cvlr_assume_ne, !=, $);
50impl_bin_assume!(cvlr_assume_le, <=, $);
51impl_bin_assume!(cvlr_assume_lt, <, $);
52impl_bin_assume!(cvlr_assume_ge, >=, $);
53impl_bin_assume!(cvlr_assume_gt, >, $);
54
55#[macro_export]
56macro_rules! cvlr_assert_if {
57 ($guard: expr, $cond: expr) => {
58 if $guard {
59 $crate::cvlr_assert!($cond);
60 }
61 };
62}
63
64#[rustfmt::skip]
65macro_rules! impl_bin_assert_if {
66 ($name: ident, $pred: tt, $dollar: tt) => {
67 #[macro_export]
68 macro_rules! $name {
69 ($guard: expr,$lhs: expr, $rhs: expr $dollar(, $desc: literal)? ) => {{
70 let __cvlr_guard = $guard;
71 cvlr::clog!(stringify!(assert if $guard { $lhs $pred $rhs }) => "_");
72 cvlr::clog!(__cvlr_guard => stringify!($guard));
73 if __cvlr_guard {
74 let __cvlr_lhs = $lhs;
75 let __cvlr_rhs = $rhs;
76 cvlr::clog!(__cvlr_lhs => stringify!($lhs));
77 cvlr::clog!(__cvlr_rhs => stringify!($rhs));
78 $crate::cvlr_assert!(__cvlr_lhs $pred __cvlr_rhs);
79 }
80 }};
81 }
82 pub use $name;
83 };
84}
85
86impl_bin_assert_if!(cvlr_assert_eq_if, ==, $);
87impl_bin_assert_if!(cvlr_assert_ne_if, !=, $);
88impl_bin_assert_if!(cvlr_assert_le_if, <=, $);
89impl_bin_assert_if!(cvlr_assert_lt_if, <, $);
90impl_bin_assert_if!(cvlr_assert_ge_if, >=, $);
91impl_bin_assert_if!(cvlr_assert_gt_if, >, $);