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, >, $);