#assert #compare #testing-debugging #test-macro #testing #test-output

dev all_asserts

A crate for multiple types of asserts that don't exist in the standard library

10 stable releases

2.3.3 Dec 28, 2024
2.3.1 Mar 2, 2022
2.3.0 Sep 13, 2021
2.2.0 Nov 10, 2020
0.1.4 Mar 19, 2019

#50 in Development tools

Download history 10374/week @ 2024-09-20 10682/week @ 2024-09-27 11444/week @ 2024-10-04 9500/week @ 2024-10-11 10298/week @ 2024-10-18 10562/week @ 2024-10-25 6958/week @ 2024-11-01 5106/week @ 2024-11-08 8211/week @ 2024-11-15 8782/week @ 2024-11-22 7413/week @ 2024-11-29 8169/week @ 2024-12-06 6731/week @ 2024-12-13 4338/week @ 2024-12-20 4030/week @ 2024-12-27 5271/week @ 2025-01-03

21,571 downloads per month
Used in 15 crates

Apache-2.0

18KB
250 lines

all_asserts GitHub Actions Workflow Status all_asserts crate Crates.io license

A crate for multiple types of asserts that don't exist in the standard library

Rationale

There are several kinds of problems that I had faced while writing tests, especially when writing comparator tests. The output from the existing macros, were providing vague outputs while debugging which made me write this crate. I had created an RFC, but neverthless it was rejected as there were not enough use cases. I am not too sure about others, but I find myself writing multiple tests that frequently make use of these assert macros.

Importing and using

Add this to your Cargo.toml :

all_asserts = "*"

And now you can use the asserts wherever you like! If you want to make it available all across your crate, in your lib.rs or main.rs, add the following:

#[macro_use]
extern crate all_asserts;

Examples

An example using assert_range! :

use all_asserts::assert_range;
fn main() {
  assert_range!(10..20, 20);
}

This outputs something like:

thread 'main' panicked at 'assertion failed:
`20 is not in range of 10..20` - it should have been in this range, src/main.rs:292:5

Another example:

use all_asserts::{assert_range, assert_nrange};
fn main() {
  assert_range!(1.0..=2.0, 1.5);
  // You can also add a debug message if the assertion fails
  assert_nrange!(
    1.0..=2.0, 1.5, "Oops! 1.5 is in the interval [1.0,2.0]"
  );
}

This outputs:

thread 'main' panicked at 'assertion failed: `1.5 is in range of 1.0..2.0` - it should not have been in this range: Oops! 1.5 is in the interval [1.0,2.0]', src/main.rs:295:5

An example using assert_lt! :

thread 'main' panicked at 'assertion failed: `(left < right) but here (left >= right)`
  left: `100` ,
 right: `200` ', src/main.rs:79:5

Isn't that much better than what the current macros provide? Well, I'll leave you to decide!

Available macros

The name of the assert pretty much tells you everything:

  • assert_gt!(a, b) -> Will panic if a is not greater than b
  • assert_ge!(a, b) -> Will panic if a is not greater than or equal to b
  • assert_lt!(a, b) -> Will panic if a is not less than b
  • assert_le!(a, b) -> Will panic if a is not greater than or equal to b
  • assert_range!((x..y), b) -> Will panic if b is not within the range [x, y)
  • assert_nrange!((x..y), b) -> Will panic if b is within the range [x, y)
  • assert_near!(a, b, e) -> Will panic if b is not within +/- e of a; i.e. b is within the range [a - e, a + e]
  • assert_true!(a) -> Will panic if a is not true
  • assert_false!(a) -> Will panic if a is not false

debug_* variants of the macros are also available, which only work on builds with debug assertions enabled (usually builds produced by running cargo build or cargo test ).

Building

Simply run:

$ git clone https://github.com/ohsayan/all_asserts.git
$ cd all_asserts
$ cargo build

And for testing:

$ cargo test

Contributing

Your welcome to!

"No man is an island!"

And I always stick to that belief! Please help me out in better formatting the output to make debugging easier. If you find an issue, go ahead a create one! (All doubts, questions and ideas are welcome)

License

This project is licensed under the Apache-2.0 License.

No runtime deps