cvlr_asserts/
asserts.rs

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