#[macro_export]
macro_rules! assert_gt {
($left:expr, $right:expr $(,)?) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val > *right_val) {
::std::panic!(r#"assertion failed: `(left > right) but here (left <= right)`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val)
}
}
}
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val > *right_val) {
::std::panic!(r#"assertion failed: `(left > right) but here (left <= right)`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
::std::format_args!($($arg)+))
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_gt {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_gt!($($arg)*); })
}
#[macro_export]
macro_rules! assert_ge {
($left:expr, $right:expr $(,)?) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val >= *right_val) {
::std::panic!(r#"assertion failed: `(left >= right) but here (left < right)`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val)
}
}
}
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val > *right_val) {
::std::panic!(r#"assertion failed: `(left >= right) but here (left < right)`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
::std::format_args!($($arg)+))
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_ge {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_ge!($($arg)*); })
}
#[macro_export]
macro_rules! assert_lt {
($left:expr, $right:expr $(,)?) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val < *right_val) {
::std::panic!(r#"assertion failed: `(left < right) but here (left >= right)`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val)
}
}
}
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val < *right_val) {
::std::panic!(r#"assertion failed: `(left < right) but here (left >= right)`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
::std::format_args!($($arg)+))
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_lt {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_lt!($($arg)*); })
}
#[macro_export]
macro_rules! assert_le {
($left:expr, $right:expr $(,)?) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val <= *right_val) {
::std::panic!(r#"assertion failed: `(left <= right) but here (left > right)`
left: `{:?}`,
right: `{:?}`"#, &*left_val, &*right_val)
}
}
}
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val <= *right_val) {
::std::panic!(r#"assertion failed: `(left <= right) but here (left > right)`
left: `{:?}`,
right: `{:?}`: {}"#, &*left_val, &*right_val,
::std::format_args!($($arg)+))
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_le {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_le!($($arg)*); })
}
#[macro_export]
macro_rules! assert_range {
($left:expr, $right:expr) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(::std::ops::RangeBounds::contains(left_val, right_val)) {
::std::panic!(
r#"assertion failed: `{} is not in range of {:?}` - it should have been in this range"#,
right_val,
left_val
)
}
}
}
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(::std::ops::RangeBounds::contains(left_val, right_val)) {
::std::panic!(
r#"assertion failed: `{} is not in range of {:?}` - it should have been in this range: {}"#,
right_val,
left_val,
::std::format_args!($($arg)+)
)
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_range {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_range!($($arg)*); })
}
#[macro_export]
macro_rules! assert_nrange {
($left:expr, $right:expr $(,)?) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if (::std::ops::RangeBounds::contains(left_val, right_val)) {
::std::panic!(
r#"assertion failed: `{} is in range of {:?}` - it should not have been in this range"#,
right_val,
left_val
)
}
}
}
});
($left:expr, $right:expr, $($arg:tt)+) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if (::std::ops::RangeBounds::contains(left_val, right_val)) {
::std::panic!(
r#"assertion failed: `{} is in range of {:?}` - it should not have been in this range: {}"#,
right_val,
left_val,
::std::format_args!($($arg)+)
)
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_nrange {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_nrange!($($arg)*); })
}
#[macro_export]
macro_rules! assert_near {
($left:expr, $right:expr, $epsilon:expr $(,)?) => ({
match (&$left, &$right, &$epsilon) {
(left_val, right_val, epsilon_val) => {
if !((*left_val <= (*right_val + *epsilon_val)) && (*left_val >= (*right_val - *epsilon_val))) {
::std::panic!(
r#"assertion failed: `{} is not within epsilon {} of {}`"#,
right_val,
epsilon_val,
left_val
)
}
}
}
});
($left:expr, $right:expr, $epsilon:expr, $($arg:tt)+ $(,)?) => ({
match (&($left), &($right), &($epsilon)) {
(left_val, right_val, epsilon_val) => {
if !((*left_val <= (*right_val + *epsilon_val)) && (*left_val >= (*right_val - *epsilon_val))) {
::std::panic!(
r#"assertion failed: `{} is not within epsilon {} of {}`"#,
right_val,
epsilon_val,
left_val,
::std::format_args!($($arg)+)
)
}
}
}
});
}
#[macro_export]
macro_rules! debug_assert_near {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_near!($($arg)*); })
}
#[macro_export]
macro_rules! assert_true {
($cond:expr $(,)?) => ({
::std::assert!($cond)
});
($cond:expr, $($arg:tt)+) => ({
::std::assert!($cond, $($arg)+)
});
}
#[macro_export]
macro_rules! debug_assert_true {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_true!($($arg)*); })
}
#[macro_export]
macro_rules! assert_false {
($cond:expr $(,)?) => ({
::std::assert!(!$cond)
});
($cond:expr, $($arg:tt)+) => ({
::std::assert!(!$cond, $($arg)+)
});
}
#[macro_export]
macro_rules! debug_assert_false {
($($arg:tt)*) => (if ::std::cfg!(debug_assertions) { $crate::assert_false($($arg)*); })
}