asserting 0.14.0

Fluent assertions for tests in Rust that are convenient to write and easy to extend.
Documentation
//! Implementation of assertions for collections and iterators.

use crate::properties::{DefinedOrderProperty, IsEmptyProperty, LengthProperty};
use crate::std::collections::{
    btree_map, btree_set, linked_list, vec_deque, BTreeMap, BTreeSet, BinaryHeap, LinkedList,
    VecDeque,
};
use crate::std::{array, slice};
use crate::std::{vec, vec::Vec};

impl<T> DefinedOrderProperty for [T] {}
impl<T, const N: usize> DefinedOrderProperty for [T; N] {}
impl<T, const N: usize> DefinedOrderProperty for array::IntoIter<T, N> {}
impl<T> DefinedOrderProperty for slice::Iter<'_, T> {}
impl<T> DefinedOrderProperty for slice::IterMut<'_, T> {}
impl<T> DefinedOrderProperty for Vec<T> {}
impl<T> DefinedOrderProperty for vec::IntoIter<T> {}
impl<T> DefinedOrderProperty for BTreeSet<T> {}
impl<T> DefinedOrderProperty for btree_set::IntoIter<T> {}
impl<T> DefinedOrderProperty for btree_set::Iter<'_, T> {}
impl<K, V> DefinedOrderProperty for btree_map::IntoIter<K, V> {}
impl<K, V> DefinedOrderProperty for btree_map::Iter<'_, K, V> {}
impl<T> DefinedOrderProperty for LinkedList<T> {}
impl<T> DefinedOrderProperty for linked_list::IntoIter<T> {}
impl<T> DefinedOrderProperty for linked_list::Iter<'_, T> {}
impl<T> DefinedOrderProperty for linked_list::IterMut<'_, T> {}
impl<T> DefinedOrderProperty for VecDeque<T> {}
impl<T> DefinedOrderProperty for vec_deque::IntoIter<T> {}
impl<T> DefinedOrderProperty for vec_deque::Iter<'_, T> {}
impl<T> DefinedOrderProperty for vec_deque::IterMut<'_, T> {}

impl<T> IsEmptyProperty for BinaryHeap<T> {
    fn is_empty_property(&self) -> bool {
        self.is_empty()
    }
}

impl<K, V> IsEmptyProperty for BTreeMap<K, V> {
    fn is_empty_property(&self) -> bool {
        self.is_empty()
    }
}

impl<T> IsEmptyProperty for BTreeSet<T> {
    fn is_empty_property(&self) -> bool {
        self.is_empty()
    }
}

impl<T> IsEmptyProperty for LinkedList<T> {
    fn is_empty_property(&self) -> bool {
        self.is_empty()
    }
}

impl<T> IsEmptyProperty for VecDeque<T> {
    fn is_empty_property(&self) -> bool {
        self.is_empty()
    }
}

impl<T> LengthProperty for BinaryHeap<T> {
    fn length_property(&self) -> usize {
        self.len()
    }
}

impl<K, V> LengthProperty for BTreeMap<K, V> {
    fn length_property(&self) -> usize {
        self.len()
    }
}

impl<T> LengthProperty for BTreeSet<T> {
    fn length_property(&self) -> usize {
        self.len()
    }
}

impl<T> LengthProperty for LinkedList<T> {
    fn length_property(&self) -> usize {
        self.len()
    }
}

impl<T> LengthProperty for VecDeque<T> {
    fn length_property(&self) -> usize {
        self.len()
    }
}

impl<T, const N: usize> IsEmptyProperty for [T; N] {
    fn is_empty_property(&self) -> bool {
        self.is_empty()
    }
}

#[cfg(feature = "std")]
mod std {
    use crate::properties::{IsEmptyProperty, LengthProperty};
    use crate::std::collections::{HashMap, HashSet};

    impl<K, V, S> IsEmptyProperty for HashMap<K, V, S> {
        fn is_empty_property(&self) -> bool {
            self.is_empty()
        }
    }

    impl<T, S> IsEmptyProperty for HashSet<T, S> {
        fn is_empty_property(&self) -> bool {
            self.is_empty()
        }
    }

    impl<K, V, S> LengthProperty for HashMap<K, V, S> {
        fn length_property(&self) -> usize {
            self.len()
        }
    }

    impl<T, S> LengthProperty for HashSet<T, S> {
        fn length_property(&self) -> usize {
            self.len()
        }
    }
}

mod hashbrown {
    use crate::properties::{IsEmptyProperty, LengthProperty};
    use hashbrown::{HashMap, HashSet};

    impl<K, V, S> IsEmptyProperty for HashMap<K, V, S> {
        fn is_empty_property(&self) -> bool {
            self.is_empty()
        }
    }

    impl<T, S> IsEmptyProperty for HashSet<T, S> {
        fn is_empty_property(&self) -> bool {
            self.is_empty()
        }
    }

    impl<T, const N: usize> LengthProperty for [T; N] {
        fn length_property(&self) -> usize {
            self.len()
        }
    }

    impl<K, V, S> LengthProperty for HashMap<K, V, S> {
        fn length_property(&self) -> usize {
            self.len()
        }
    }

    impl<T, S> LengthProperty for HashSet<T, S> {
        fn length_property(&self) -> usize {
            self.len()
        }
    }
}