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