Crates.io | cmp |
lib.rs | cmp |
version | 0.1.0 |
source | src |
created_at | 2024-06-06 13:41:33.69046 |
updated_at | 2024-06-06 13:41:33.69046 |
description | Simple, convenience macros and function for comparing. |
homepage | |
repository | |
max_upload_size | |
id | 1263717 |
size | 7,746 |
cmp
is a Rust crate that provides a macro for comparing fields in structs, which is particularly useful when writing assert!
tests.
To use this crate, add the following to your Cargo.toml
:
[dependencies]
cmp = "0.1.0"
Then, in your Rust file:
use cmp::compare_structs;
compare_structs!
The compare_structs!
macro compares specified fields of two structs. If the fields do not match, the macro will panic and output the fields that do not match.
use cmp::compare_structs;
struct A<'a> {
a: i32,
b: &'a str,
c: [(f64, f32); 2],
}
struct B<'a> {
a: i32,
b: &'a str,
c: [(f64, f32); 2],
}
let struct_a = A {
a: 10,
b: "str",
c: [(1.0, 1.0), (2.0, 2.0)],
};
let struct_b = B {
a: 10,
b: "diff str",
c: [(1.0, 1.0), (2.0, 2.0)],
};
compare_structs!(struct_a, struct_b, a, c);
In this example, the compare_structs!
macro compares the a
and c
fields of struct_a
and struct_b
. If they do not match, the macro will panic and output the fields that do not match.
The output of the compare_structs!
macro singles out the fields in the structs that do not match. For example:
thread 'tests::compare_different_structs' panicked at src/lib.rs:135:9:
c: [
(
1.0,
1.0,
),
(
2.0,
3.0,
),
] != [
(
1.0,
1.0,
),
(
2.0,
2.0,
),
]
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
In this output, the c
field of the two structs do not match, and the macro outputs the differing values.