#[macro_export]
macro_rules! assert_ok_eq {
($cond:expr, $expected:expr $(,)?) => {
match $cond {
::core::result::Result::Ok(t) => {
::core::assert_eq!(t, $expected);
t
},
e @ ::core::result::Result::Err(_) => {
::core::panic!("assertion failed, expected Ok(_), got {:?}", e);
}
}
};
($cond:expr, $expected:expr, $($arg:tt)+) => {
match $cond {
::core::result::Result::Ok(t) => {
::core::assert_eq!(t, $expected, $($arg)+);
t
},
e @ ::core::result::Result::Err(_) => {
::core::panic!("assertion failed, expected Ok(_), got {:?}: {}", e, ::core::format_args!($($arg)+));
}
}
};
}
#[macro_export]
macro_rules! debug_assert_ok_eq {
($($arg:tt)*) => {
#[cfg(debug_assertions)]
$crate::assert_ok_eq!($($arg)*);
}
}
#[cfg(test)]
mod tests {
#[test]
fn equal() {
assert_ok_eq!(Ok::<_, ()>(42), 42);
}
#[test]
#[should_panic]
fn not_equal() {
assert_ok_eq!(Ok::<_, ()>(42), 100);
}
#[test]
#[should_panic(expected = "assertion failed, expected Ok(_), got Err(())")]
fn not_ok() {
assert_ok_eq!(Err::<usize, _>(()), 42);
}
#[test]
#[should_panic(expected = "foo")]
fn not_equal_custom_message() {
assert_ok_eq!(Ok::<_, ()>(1), 2, "foo");
}
#[test]
#[should_panic(expected = "assertion failed, expected Ok(_), got Err(()): foo")]
fn not_ok_custom_message() {
assert_ok_eq!(Err::<usize, ()>(()), 2, "foo");
}
#[test]
#[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
fn debug_equal() {
debug_assert_ok_eq!(Ok::<_, ()>(42), 42);
}
#[test]
#[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
#[should_panic]
fn debug_not_equal() {
debug_assert_ok_eq!(Ok::<_, ()>(42), 100);
}
#[test]
#[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
#[should_panic(expected = "assertion failed, expected Ok(_), got Err(())")]
fn debug_not_ok() {
debug_assert_ok_eq!(Err::<usize, _>(()), 42);
}
#[test]
#[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
#[should_panic(expected = "foo")]
fn debug_not_equal_custom_message() {
debug_assert_ok_eq!(Ok::<_, ()>(1), 2, "foo");
}
#[test]
#[cfg_attr(not(debug_assertions), ignore = "only run in debug mode")]
#[should_panic(expected = "assertion failed, expected Ok(_), got Err(()): foo")]
fn debug_not_ok_custom_message() {
debug_assert_ok_eq!(Err::<usize, ()>(()), 2, "foo");
}
#[test]
#[cfg_attr(debug_assertions, ignore = "only run in release mode")]
fn debug_release_not_equal() {
debug_assert_ok_eq!(Ok::<_, ()>(42), 100);
}
#[test]
#[cfg_attr(debug_assertions, ignore = "only run in release mode")]
fn debug_release_not_ok() {
debug_assert_ok_eq!(Err::<usize, _>(()), 42);
}
}