use crate::{
OrdMap,
OrdSet,
Vector,
};
use ::proptest::{
collection::vec,
strategy::{
BoxedStrategy,
Strategy,
ValueTree,
},
};
use core::{
hash::Hash,
iter::FromIterator,
ops::Range,
};
pub fn vector<A: Strategy + 'static>(
element: A,
size: Range<usize>,
) -> BoxedStrategy<Vector<<A::Tree as ValueTree>::Value>>
where
<A::Tree as ValueTree>::Value: Clone,
{
vec(element, size).prop_map(Vector::from_iter).boxed()
}
pub fn ord_map<K: Strategy + 'static, V: Strategy + 'static>(
key: K,
value: V,
size: Range<usize>,
) -> BoxedStrategy<
OrdMap<<K::Tree as ValueTree>::Value, <V::Tree as ValueTree>::Value>,
>
where
<K::Tree as ValueTree>::Value: Ord + Clone,
<V::Tree as ValueTree>::Value: Clone,
{
::proptest::collection::vec((key, value), size.clone())
.prop_map(OrdMap::from)
.prop_filter("OrdMap minimum size".to_owned(), move |m| {
m.len() >= size.start
})
.boxed()
}
pub fn ord_set<A: Strategy + 'static>(
element: A,
size: Range<usize>,
) -> BoxedStrategy<OrdSet<<A::Tree as ValueTree>::Value>>
where
<A::Tree as ValueTree>::Value: Ord + Clone,
{
::proptest::collection::vec(element, size.clone())
.prop_map(OrdSet::from)
.prop_filter("OrdSet minimum size".to_owned(), move |s| {
s.len() >= size.start
})
.boxed()
}
pub fn hash_map<K: Strategy + 'static, V: Strategy + 'static>(
key: K,
value: V,
size: Range<usize>,
) -> BoxedStrategy<
HashMap<<K::Tree as ValueTree>::Value, <V::Tree as ValueTree>::Value>,
>
where
<K::Tree as ValueTree>::Value: Hash + Eq + Clone,
<V::Tree as ValueTree>::Value: Clone,
{
::proptest::collection::vec((key, value), size.clone())
.prop_map(HashMap::from)
.prop_filter("Map minimum size".to_owned(), move |m| m.len() >= size.start)
.boxed()
}
pub fn hash_set<A: Strategy + 'static>(
element: A,
size: Range<usize>,
) -> BoxedStrategy<HashSet<<A::Tree as ValueTree>::Value>>
where
<A::Tree as ValueTree>::Value: Hash + Eq + Clone,
{
::proptest::collection::vec(element, size.clone())
.prop_map(HashSet::from)
.prop_filter("HashSet minimum size".to_owned(), move |s| {
s.len() >= size.start
})
.boxed()
}