#[macro_export]
macro_rules! assert_ready_eq_as_result {
($a:expr, $b:expr $(,)?) => {
match ($a, $b) {
(Ready(a1), Ready(b1)) => {
if a1 == b1 {
Ok((a1, b1))
} else {
Err(format!(
concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `{}`,\n",
" a debug: `{:?}`,\n",
" a inner: `{:?}`,\n",
" b label: `{}`,\n",
" b debug: `{:?}`,\n",
" b inner: `{:?}`"
),
stringify!($a),
$a,
a1,
stringify!($b),
$b,
b1
))
}
}
_ => Err(format!(
concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `{}`,\n",
" a debug: `{:?}`,\n",
" b label: `{}`,\n",
" b debug: `{:?}`",
),
stringify!($a),
$a,
stringify!($b),
$b
)),
}
};
}
#[cfg(test)]
mod test_assert_ready_eq_as_result {
use std::task::Poll;
use std::task::Poll::*;
#[test]
fn eq() {
let a: Poll<i8> = Ready(1);
let b: Poll<i8> = Ready(1);
for _ in 0..1 {
let actual = assert_ready_eq_as_result!(a, b);
assert_eq!(actual.unwrap(), (1, 1));
}
}
#[test]
fn ne() {
let a: Poll<i8> = Ready(1);
let b: Poll<i8> = Ready(2);
let actual = assert_ready_eq_as_result!(a, b);
let message = concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `a`,\n",
" a debug: `Ready(1)`,\n",
" a inner: `1`,\n",
" b label: `b`,\n",
" b debug: `Ready(2)`,\n",
" b inner: `2`",
);
assert_eq!(actual.unwrap_err(), message);
}
#[test]
fn failure_because_not_ready() {
let a: Poll<i8> = Pending;
let b: Poll<i8> = Ready(1);
let actual = assert_ready_eq_as_result!(a, b);
let message = concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `a`,\n",
" a debug: `Pending`,\n",
" b label: `b`,\n",
" b debug: `Ready(1)`",
);
assert_eq!(actual.unwrap_err(), message);
}
}
#[macro_export]
macro_rules! assert_ready_eq {
($a:expr, $b:expr $(,)?) => {
match $crate::assert_ready_eq_as_result!($a, $b) {
Ok(x) => x,
Err(err) => panic!("{}", err),
}
};
($a:expr, $b:expr, $($message:tt)+) => {
match $crate::assert_ready_eq_as_result!($a, $b) {
Ok(x) => x,
Err(err) => panic!("{}\n{}", format_args!($($message)+), err),
}
};
}
#[cfg(test)]
mod test_assert_ready_eq {
use std::panic;
use std::task::Poll;
use std::task::Poll::*;
#[test]
fn eq() {
let a: Poll<i8> = Ready(1);
let b: Poll<i8> = Ready(1);
for _ in 0..1 {
let actual = assert_ready_eq!(a, b);
assert_eq!(actual, (1, 1));
}
}
#[test]
fn ne() {
let a: Poll<i8> = Ready(1);
let b: Poll<i8> = Ready(2);
let result = panic::catch_unwind(|| {
let _actual = assert_ready_eq!(a, b);
});
let message = concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `a`,\n",
" a debug: `Ready(1)`,\n",
" a inner: `1`,\n",
" b label: `b`,\n",
" b debug: `Ready(2)`,\n",
" b inner: `2`",
);
assert_eq!(
result
.unwrap_err()
.downcast::<String>()
.unwrap()
.to_string(),
message
);
}
#[test]
fn not_ready() {
let a: Poll<i8> = Pending;
let b: Poll<i8> = Ready(1);
let result = panic::catch_unwind(|| {
let _actual = assert_ready_eq!(a, b);
});
let message = concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `a`,\n",
" a debug: `Pending`,\n",
" b label: `b`,\n",
" b debug: `Ready(1)`",
);
assert_eq!(
result
.unwrap_err()
.downcast::<String>()
.unwrap()
.to_string(),
message
);
}
}
#[macro_export]
macro_rules! debug_assert_ready_eq {
($($arg:tt)*) => {
if cfg!(debug_assertions) {
$crate::assert_ready_eq!($($arg)*);
}
};
}
#[cfg(test)]
mod test_debug_assert_ready_eq {
use std::panic;
use std::task::Poll;
use std::task::Poll::*;
#[test]
fn eq() {
let a: Poll<i8> = Ready(1);
let b: Poll<i8> = Ready(1);
for _ in 0..1 {
let _actual = debug_assert_ready_eq!(a, b);
}
}
#[test]
fn ne() {
let a: Poll<i8> = Ready(1);
let b: Poll<i8> = Ready(2);
let result = panic::catch_unwind(|| {
let _actual = debug_assert_ready_eq!(a, b);
});
let message = concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `a`,\n",
" a debug: `Ready(1)`,\n",
" a inner: `1`,\n",
" b label: `b`,\n",
" b debug: `Ready(2)`,\n",
" b inner: `2`",
);
assert_eq!(
result
.unwrap_err()
.downcast::<String>()
.unwrap()
.to_string(),
message
);
}
#[test]
fn not_ready() {
let a: Poll<i8> = Pending;
let b: Poll<i8> = Ready(1);
let result = panic::catch_unwind(|| {
let _actual = debug_assert_ready_eq!(a, b);
});
let message = concat!(
"assertion failed: `assert_ready_eq!(a, b)`\n",
"https://docs.rs/assertables/9.9.0/assertables/macro.assert_ready_eq.html\n",
" a label: `a`,\n",
" a debug: `Pending`,\n",
" b label: `b`,\n",
" b debug: `Ready(1)`",
);
assert_eq!(
result
.unwrap_err()
.downcast::<String>()
.unwrap()
.to_string(),
message
);
}
}