[−][src]Crate assert2
All-purpose assert!(...)
and check!(...)
macros, inspired by Catch2.
There is also a debug_assert!(...)
macro that is disabled on optimized builds by default.
Why these macros?
These macros offer some benefits over the assertions from the standard library:
- The macros parse your expression to detect comparisons and adjust the error message accordingly.
No more
assert_eq
orassert_ne
, just writeassert!(1 + 1 == 2)
, or evenassert!(1 + 1 > 1)
! - You can test for pattern matches:
assert!(let Err(_) = File::open("/non/existing/file"))
. - The
check
macro can be used to perform multiple checks before panicking. - The macros provide more information when the assertion fails.
- Colored failure messages!
The macros also accept additional arguments for a custom message, so it is fully comptabible with std::assert
.
That means you don't have to worry about overwriting the standard assert
with use assert2::assert
.
Examples
check!(6 + 1 <= 2 * 3);
check!(true && false);
check!(let Ok(_) = File::open("/non/existing/file"));
assert
vs check
The crate provides two macros: check!(...)
and assert!(...)
.
The main difference is that check
is really intended for test cases and doesn't immediately panic.
Instead, it will print the assertion error and fail the test.
This allows you to run multiple checks and can help to determine the reason of a test failure more easily.
The assert
macro on the other hand simply prints the error and panics,
and can be used outside of tests just as well.
Currently, check
uses a scope guard to delay the panic until the current scope ends.
Ideally, check
doesn't panic at all, but only signals that a test case has failed.
If this becomes possible in the future, the check
macro will change, so you should not rely on check
to panic.
Difference between stable and nightly.
If available, the crate uses the proc_macro_span
feature to get the original source code.
On stable and beta, it falls back to stringifying the expression.
This makes the output a bit more readable on nightly,
but the differences are limited to the displayed expression.
Controlling colored output.
You can force colored output on or off by setting the CLICOLOR
environment variable.
Set CLICOLOR=1
to forcibly enable colors, or CLICOLORS=0
to disable them.
If the environment variable is unset or set to auto
, output will be colored if it is going to a terminal.
Macros
assert | Assert that an expression evaluates to true or matches a pattern. |
check | Check if an expression evaluates to true or matches a pattern. |
debug_assert | Assert that an expression evaluates to true or matches a pattern. |