clearcheck 0.0.2

Elegant and extensible assertions in rust.
Documentation
use std::collections::HashMap;

use clearcheck::assertions::collection::size::SizeAssertion;
use clearcheck::assertions::map::membership::{
    KeyMembershipAssertion, KeyValueMembershipAssertion, NoMembershipAssertion,
    ValueMembershipAssertion,
};

#[derive(Eq, Debug, PartialEq, Hash)]
struct Book {
    id: usize,
    title: &'static str,
}

impl Book {
    fn new(id: usize, title: &'static str) -> Self {
        Book { id, title }
    }
}

#[test]
fn should_match_all_books_by_name() {
    let mut book_id_by_name = HashMap::new();
    book_id_by_name.insert("Database internals", 1);
    book_id_by_name.insert("Designing data intensive applications", 2);

    book_id_by_name
        .should_not_be_empty()
        .should_contain_key("Database internals")
        .should_contain_value(&1)
        .should_have_at_least_size(2)
        .should_contain("Database internals", &1);
}

#[test]
fn should_match_all_books() {
    let mut book_rank_by_name = HashMap::new();
    book_rank_by_name.insert(Book::new(20, "Patterns of Distributed Systems"), 1);
    book_rank_by_name.insert(Book::new(21, "Designing data intensive applications"), 2);
    book_rank_by_name.insert(Book::new(21, "Database internals"), 3);

    book_rank_by_name
        .should_not_be_empty()
        .should_contain_key(&Book::new(20, "Patterns of Distributed Systems"))
        .should_not_contain_key(&Book::new(25, "Rust in action"))
        .should_have_size_in_inclusive_range(1..=5)
        .should_contain_any_of_values(vec![&1, &3, &4]);
}