| Crates.io | always_equal |
| lib.rs | always_equal |
| version | 1.0.3 |
| created_at | 2021-03-21 18:23:05.82505+00 |
| updated_at | 2023-01-07 00:15:13.200872+00 |
| description | A wrapper for types that can't implement Eq |
| homepage | |
| repository | https://six-five-six-four.com/git/reactor/ptth |
| max_upload_size | |
| id | 371800 |
| size | 7,372 |
Always-Equal lets you wrap PartialEq implementations around
things that cannot be compared, like a File.
To use Always-Equal, put these two conditional use
statements in your module:
#[cfg (test)]
use always_equal::test::AlwaysEqual;
#[cfg (not (test))]
use always_equal::prod::AlwaysEqual;
Then wrap AlwaysEqual around anything that needs
PartialEq but can't possibly implement it:
use std::fs::File;
use always_equal::test::AlwaysEqual;
#[derive (Debug, PartialEq)]
pub struct MyStruct {
pub b: bool,
pub i: i64,
pub file: AlwaysEqual <File>,
}
// In test code, you can create an empty wrapper using
// `testing_blank`, which is equal to any other wrapper:
let expected = MyStruct {
b: true,
i: 0,
file: AlwaysEqual::testing_blank (),
};
# let my_file = File::open ("Cargo.toml").unwrap ();
let actual = MyStruct {
b: true,
i: 0,
file: my_file.into (),
};
assert_eq! (expected, actual);
This is implemented with Option in test mode.
In production mode, wrappers are never equal to any other
wrapper, and the Option is removed so that
sizeof::<AlwaysEqual <T>> () == sizeof::<T>
should be true.