Crate always_equal[−][src]
Always-Equal
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 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.
Modules
prod | Should be used for non-test builds |
test | Should be used for test builds |