1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
///
/// Macro asserts that two expressions are identical to each other. Unlike std::assert_eq it is removed from a release build.
///
#[ macro_export ]
macro_rules! debug_assert_id
{
( $( $arg : tt )+ ) =>
{
#[cfg(debug_assertions)]
$crate::assert_eq!( $( $arg )+ );
};
// ( $left : expr, $right : expr $(,)? ) =>
// {{
// match( &$left, &$right )
// {
// #[cfg(debug_assertions)]
// ( left_val, right_val ) =>
// {
// if !( *left_val == *right_val )
// {
// let kind = core::panicking::AssertKind::Eq;
// core::panicking::assert_failed
// (
// kind,
// &*left_val,
// &*right_val,
// core::option::Option::None,
// );
// }
// }
// }
// }};
// ( $left : expr, $right:expr, $( $arg : tt )+ ) =>
// {{
// match( &$left, &$right )
// {
// #[cfg(debug_assertions)]
// ( left_val, right_val ) =>
// {
// if !(*left_val == *right_val)
// {
// let kind = core::panicking::AssertKind::Eq;
// core::panicking::assert_failed
// (
// kind,
// &*left_val,
// &*right_val,
// core::option::Option::Some( $crate::format_args!( $( $arg )+ ) ),
// );
// }
// }
// }
// }};
}
/// Macro asserts that two expressions are identical to each other. Unlike std::assert_eq it is removed from a release build. Alias of debug_assert_id.
#[ macro_export ]
macro_rules! debug_assert_identical
{
( $( $arg : tt )+ ) =>
{
#[cfg(debug_assertions)]
$crate::debug_assert_id!( $( $arg )+ );
};
}
/// Macro asserts that two expressions are not identical to each other. Unlike std::assert_eq it is removed from a release build.
#[ macro_export ]
macro_rules! debug_assert_ni
{
( $( $arg : tt )+ ) =>
{
#[cfg(debug_assertions)]
$crate::assert_ne!( $( $arg )+ );
};
}
/// Macro asserts that two expressions are not identical to each other. Unlike std::assert_eq it is removed from a release build.
#[ macro_export ]
macro_rules! debug_assert_not_identical
{
( $( $arg : tt )+ ) =>
{
#[cfg(debug_assertions)]
$crate::assert_ne!( $( $arg )+ );
};
}
// /// Macro asserts that expression is ture. Unlike std::assert it is removed from a release build.
//
// #[ macro_export ]
// macro_rules! debug_assert
// {
// ( $( $arg : tt )+ ) =>
// {
// #[cfg(debug_assertions)]
// $crate::assert!( $( $arg )+ );
// };
// }