The ApproxEq
trait handily provides a way to define approximate relations between types and comes with already-declared arbitrary implementations for primitive number types!
Easily define implementations for your own types: ```rust use approxeq::ApproxEq;
enum BookFormat { Paperback, Hardback, Ebook, }
struct Book { isbn: i32, format: BookFormat, }
impl ApproxEq for Book { // Two books are approximately equal when their respective ISBNs parity matches fn aeq(&self, &other: Self) -> bool { self.isbn % 2 == other.isbn %2 } }
fn main() { let b1 = Book { isbn: 3, format: Paperback } let b2 = Book { isbn: 5, format: Hardback } let b3 = Book { isbn: 10, format: Ebook }
assert!(b1.aeq(&b2));
assert!(b1.nae(&b3));
} ```
Any and all PRs are welcome.
The ApproxEq crate is what you might call a joke.
Much of the documentation is an adaptation of rust-lang's std::cmp::PartialEq
trait documentation.