#[macro_export]
macro_rules! assert_ne {
($left:expr, $right:expr) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val != *right_val) {
panic!("assertion failed: `(left != right)` (left: `{:?}`, right: `{:?}`)", left_val, right_val)
}
}
}
})
}
#[macro_export]
macro_rules! assert_lt {
($left:expr, $right:expr) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val < *right_val) {
panic!("assertion failed: `(left < right)` (left: `{:?}`, right: `{:?}`)", left_val, right_val)
}
}
}
})
}
#[macro_export]
macro_rules! assert_gt {
($left:expr, $right:expr) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val > *right_val) {
panic!("assertion failed: `(left > right)` (left: `{:?}`, right: `{:?}`)", left_val, right_val)
}
}
}
})
}
#[macro_export]
macro_rules! assert_le {
($left:expr, $right:expr) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val <= *right_val) {
panic!("assertion failed: `(left <= right)` (left: `{:?}`, right: `{:?}`)", left_val, right_val)
}
}
}
})
}
#[macro_export]
macro_rules! assert_ge {
($left:expr, $right:expr) => ({
match (&($left), &($right)) {
(left_val, right_val) => {
if !(*left_val >= *right_val) {
panic!("assertion failed: `(left >= right)` (left: `{:?}`, right: `{:?}`)", left_val, right_val)
}
}
}
})
}
#[macro_export]
macro_rules! debug_assert_ne {
($left:expr, $right:expr) => {
if cfg!(debug_assertions) {
assert_ne!($left, $right);
}
}
}
#[macro_export]
macro_rules! debug_assert_lt {
($left:expr, $right:expr) => {
if cfg!(debug_assertions) {
assert_lt!($left, $right);
}
}
}
#[macro_export]
macro_rules! debug_assert_gt {
($left:expr, $right:expr) => {
if cfg!(debug_assertions) {
assert_gt!($left, $right);
}
}
}
#[macro_export]
macro_rules! debug_assert_le {
($left:expr, $right:expr) => {
if cfg!(debug_assertions) {
assert_le!($left, $right);
}
}
}
#[macro_export]
macro_rules! debug_assert_ge {
($left:expr, $right:expr) => {
if cfg!(debug_assertions) {
assert_ge!($left, $right);
}
}
}
#[macro_export]
macro_rules! debug_unreachable {
($($arg:tt)*) => {
if cfg!(debug_assertions) {
unreachable!($($arg)*);
}
}
}
#[cfg(test)]
mod tests {
#[test]
fn test_assert_ne_pass() {
let a = 3;
assert_ne!(a, 4);
assert_ne!("foo", "bar");
}
#[test]
#[should_panic]
fn test_assert_ne_fail() {
assert_ne!(3, 3);
}
#[test]
fn test_assert_lt_pass() {
let a = 3;
assert_lt!(a, 4);
assert_lt!(4.0, 4.5);
}
#[test]
#[should_panic]
fn test_assert_lt_fail0() {
assert_lt!(3, 3);
}
#[test]
#[should_panic]
fn test_assert_lt_fail1() {
assert_lt!(5, 3);
}
#[test]
fn test_assert_le_pass() {
let a = 3;
assert_le!(a, 4);
assert_le!(4.0, 4.5);
assert_le!(10, 10);
}
#[test]
#[should_panic]
fn test_assert_le_fail() {
assert_le!(5, 3);
}
#[test]
fn test_assert_gt_pass() {
let a = 3;
assert_gt!(4, a);
assert_gt!(4.5, 4.0);
}
#[test]
#[should_panic]
fn test_assert_gt_fail0() {
assert_gt!(3, 3);
}
#[test]
#[should_panic]
fn test_assert_gt_fail1() {
assert_gt!(3, 5);
}
#[test]
fn test_assert_ge_pass() {
let a = 3;
assert_ge!(4, a);
assert_ge!(4.5, 4.0);
assert_ge!(10, 10);
}
#[test]
#[should_panic]
fn test_assert_ge_fail() {
assert_ge!(3, 5);
}
}