imbl 7.0.0

Immutable collection datatypes
Documentation
use crate::{
    shared_ptr::SharedPointerKind, GenericHashMap, GenericHashSet, GenericOrdMap, GenericOrdSet,
    GenericVector,
};
use ::quickcheck::{Arbitrary, Gen};
use std::hash::{BuildHasher, Hash};
use std::iter::FromIterator;

impl<A: Arbitrary + Sync + Clone, P: SharedPointerKind + 'static> Arbitrary
    for GenericVector<A, P>
{
    fn arbitrary(g: &mut Gen) -> Self {
        GenericVector::from_iter(Vec::<A>::arbitrary(g))
    }
}

impl<
        K: Ord + Clone + Arbitrary + Sync,
        V: Clone + Arbitrary + Sync,
        P: SharedPointerKind + 'static,
    > Arbitrary for GenericOrdMap<K, V, P>
{
    fn arbitrary(g: &mut Gen) -> Self {
        GenericOrdMap::from_iter(Vec::<(K, V)>::arbitrary(g))
    }
}

impl<A: Ord + Clone + Arbitrary + Sync, P: SharedPointerKind + 'static> Arbitrary
    for GenericOrdSet<A, P>
{
    fn arbitrary(g: &mut Gen) -> Self {
        GenericOrdSet::from_iter(Vec::<A>::arbitrary(g))
    }
}

impl<A, S, P> Arbitrary for GenericHashSet<A, S, P>
where
    A: Hash + Eq + Arbitrary + Sync,
    S: BuildHasher + Clone + Default + Send + Sync + 'static,
    P: SharedPointerKind + 'static,
{
    fn arbitrary(g: &mut Gen) -> Self {
        GenericHashSet::from_iter(Vec::<A>::arbitrary(g))
    }
}

impl<K, V, S, P> Arbitrary for GenericHashMap<K, V, S, P>
where
    K: Hash + Eq + Arbitrary + Sync,
    V: Arbitrary + Sync,
    S: BuildHasher + Clone + Default + Send + Sync + 'static,
    P: SharedPointerKind + 'static,
{
    fn arbitrary(g: &mut Gen) -> Self {
        GenericHashMap::from(Vec::<(K, V)>::arbitrary(g))
    }
}