10 releases
0.3.5 | Apr 17, 2022 |
---|---|
0.3.4 | Apr 17, 2022 |
0.2.1 | Apr 16, 2022 |
0.1.1 | Apr 16, 2022 |
#1080 in Rust patterns
38,171 downloads per month
Used in 68 crates
(7 directly)
37KB
275 lines
assert_unordered
A direct replacement for assert_eq
for unordered collections
This macro is useful for any situation where the ordering of the collection doesn't matter, even
if they are always in the same order. This is because the stdlib assert_eq
shows the entire
collection for both left and right and leaves it up to the user to visually scan for differences.
In contrast, this crate only works with collections (types that implement IntoIterator
) and
therefore can show only the differences (see below for an example of what the output looks like).
NOTE: As of 0.3.2, the output by default is in color similar to pretty_assertions
Usage
NOTE: no-default-features
can be used to disable color output (and enable no-std
support)
[dev-dependencies]
assert_unordered = "0.3"
Which Macro?
TLDR; - favor assert_eq_unordered_sort
unless the trait requirements can't be met
- assert_eq_unordered
- Requires only
Debug
andPartialEq
on the elements - Collection level equality check, and if unequal, falls back to item by item compare (O(n^2))
- Requires only
- assert_eq_unordered_sort
- Requires
Debug
,Eq
andOrd
on the elements - Collection level equality check, and if unequal, sorts and then compares again, and if still unequal, falls back to item by item compare (O(n^2))
- Requires
Example
use assert_unordered::assert_eq_unordered;
#[derive(Debug, PartialEq)]
struct MyType(i32);
fn main() {
let expected = vec![MyType(1), MyType(2), MyType(4), MyType(5)];
let actual = vec![MyType(2), MyType(0), MyType(4)];
assert_eq_unordered!(expected, actual);
}
Output:
License
This project is licensed optionally under either:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)