#[macro_export]
macro_rules! assert_program_args_stderr_ge_as_result {
($a_program:expr, $a_args:expr, $b_program:expr, $b_args:expr $(,)?) => {{
match ($a_program, $a_args, $b_program, $b_args) {
(a_program, a_args, b_program, b_args) => {
let a_output = assert_program_args_impl_prep!(a_program, a_args);
let b_output = assert_program_args_impl_prep!(b_program, b_args);
if a_output.is_err() || b_output.is_err() {
Err(format!(
concat!(
"assertion failed: `assert_program_args_stderr_ge!(a_program, a_args, b_program, b_args)`\n",
"https://docs.rs/assertables/8.12.0/assertables/macro.assert_program_args_stderr_ge.html\n",
" a_program label: `{}`,\n",
" a_program debug: `{:?}`,\n",
" a_args label: `{}`,\n",
" a_args debug: `{:?}`,\n",
" b_program label: `{}`,\n",
" b_program debug: `{:?}`,\n",
" b_args label: `{}`,\n",
" b_args debug: `{:?}`,\n",
" a output: `{:?}`,\n",
" b output: `{:?}`"
),
stringify!($a_program),
a_program,
stringify!($a_args),
a_args,
stringify!($b_program),
b_program,
stringify!($b_args),
b_args,
a_output,
b_output
))
} else {
let a_string = String::from_utf8(a_output.unwrap().stderr).unwrap();
let b_string = String::from_utf8(b_output.unwrap().stderr).unwrap();
if a_string >= b_string {
Ok(())
} else {
Err(format!(
concat!(
"assertion failed: `assert_program_args_stderr_ge!(a_program, a_args, b_program, b_args)`\n",
"https://docs.rs/assertables/8.12.0/assertables/macro.assert_program_args_stderr_ge.html\n",
" a_program label: `{}`,\n",
" a_program debug: `{:?}`,\n",
" a_args label: `{}`,\n",
" a_args debug: `{:?}`,\n",
" b_program label: `{}`,\n",
" b_program debug: `{:?}`,\n",
" b_args label: `{}`,\n",
" b_args debug: `{:?}`,\n",
" a: `{:?}`,\n",
" b: `{:?}`"
),
stringify!($a_program),
a_program,
stringify!($a_args),
a_args,
stringify!($b_program),
b_program,
stringify!($b_args),
b_args,
a_string,
b_string
))
}
}
}
}
}};
}
#[cfg(test)]
mod tests {
#[test]
fn test_assert_program_args_stderr_ge_as_result_x_success_because_gt() {
let a_program = "bin/printf-stderr";
let a_args = ["%s", "hello"];
let b_program = "bin/printf-stderr";
let b_args = ["%s", "hallo"];
let result = assert_program_args_stderr_ge_as_result!(&a_program, &a_args, &b_program, &b_args);
assert_eq!(result.unwrap(), ());
}
#[test]
fn test_assert_program_args_stderr_ge_as_result_x_success_because_eq() {
let a_program = "bin/printf-stderr";
let a_args = ["%s", "hello"];
let b_program = "bin/printf-stderr";
let b_args = ["%s", "hello"];
let result = assert_program_args_stderr_ge_as_result!(&a_program, &a_args, &b_program, &b_args);
assert_eq!(result.unwrap(), ());
}
#[test]
fn test_assert_program_args_stderr_ge_as_result_x_failure_because_lt() {
let a_program = "bin/printf-stderr";
let a_args = ["%s", "hello"];
let b_program = "bin/printf-stderr";
let b_args = ["%s", "hullo"];
let result = assert_program_args_stderr_ge_as_result!(&a_program, &a_args, &b_program, &b_args);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_program_args_stderr_ge!(a_program, a_args, b_program, b_args)`\n",
"https://docs.rs/assertables/8.12.0/assertables/macro.assert_program_args_stderr_ge.html\n",
" a_program label: `&a_program`,\n",
" a_program debug: `\"bin/printf-stderr\"`,\n",
" a_args label: `&a_args`,\n",
" a_args debug: `[\"%s\", \"hello\"]`,\n",
" b_program label: `&b_program`,\n",
" b_program debug: `\"bin/printf-stderr\"`,\n",
" b_args label: `&b_args`,\n",
" b_args debug: `[\"%s\", \"hullo\"]`,\n",
" a: `\"hello\"`,\n",
" b: `\"hullo\"`"
);
assert_eq!(actual, expect);
}
}
#[macro_export]
macro_rules! assert_program_args_stderr_ge {
($a_program:expr, $a_args:expr, $b_program:expr, $b_args:expr $(,)?) => {{
match $crate::assert_program_args_stderr_ge_as_result!($a_program, $a_args, $b_program, $b_args) {
Ok(()) => (),
Err(err) => panic!("{}", err),
}
}};
($a_program:expr, $a_args:expr, $b_program:expr, $($message:tt)+) => {{
match $crate::assert_program_args_stderr_ge_as_result!($a_program, $a_args, $b_program, $b_args) {
Ok(()) => (),
Err(_err) => panic!("{}", $($message)+),
}
}};
}
#[macro_export]
macro_rules! debug_assert_program_args_stderr_ge {
($($arg:tt)*) => {
if $crate::cfg!(debug_assertions) {
$crate::assert_program_args_stderr_ge!($($arg)*);
}
};
}