#[cfg(test)]
use proptest::prelude::*;
#[cfg(test)]
use crate::Pattern;
#[cfg(test)]
pub fn arbitrary_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
let leaf = any::<i32>().prop_map(Pattern::point);
leaf.prop_recursive(
5, 256, 10, |inner| {
(any::<i32>(), prop::collection::vec(inner, 0..10))
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}
#[cfg(test)]
pub fn arbitrary_pattern_string() -> impl Strategy<Value = Pattern<String>> {
let leaf = "[a-zA-Z0-9]{1,10}".prop_map(|s: String| Pattern::point(s));
leaf.prop_recursive(
5, 256, 10, |inner| {
("[a-zA-Z0-9]{1,10}", prop::collection::vec(inner, 0..10))
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}
#[cfg(test)]
pub fn arbitrary_pattern_option() -> impl Strategy<Value = Pattern<Option<i32>>> {
let leaf = any::<Option<i32>>().prop_map(Pattern::point);
leaf.prop_recursive(
5, 256, 10, |inner| {
(any::<Option<i32>>(), prop::collection::vec(inner, 0..10))
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}
#[cfg(test)]
pub fn arbitrary_pattern_result() -> impl Strategy<Value = Pattern<Result<i32, String>>> {
let leaf = any::<Result<i32, String>>().prop_map(Pattern::point);
leaf.prop_recursive(
5, 256, 10, |inner| {
(
any::<Result<i32, String>>(),
prop::collection::vec(inner, 0..10),
)
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}
#[cfg(test)]
pub fn atomic_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
any::<i32>().prop_map(|v| Pattern::point(v))
}
#[cfg(test)]
pub fn shallow_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
let leaf = any::<i32>().prop_map(|v| Pattern::point(v));
leaf.prop_recursive(
2, 64, 5, |inner| {
(any::<i32>(), prop::collection::vec(inner, 0..5))
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}
#[cfg(test)]
pub fn deep_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
let leaf = any::<i32>().prop_map(|v| Pattern::point(v));
leaf.prop_recursive(
20, 100, 3, |inner| {
(any::<i32>(), prop::collection::vec(inner, 0..3))
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}
#[cfg(test)]
pub fn wide_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
let leaf = any::<i32>().prop_map(|v| Pattern::point(v));
leaf.prop_recursive(
3, 1000, 50, |inner| {
(any::<i32>(), prop::collection::vec(inner, 0..50))
.prop_map(|(value, elements)| Pattern::pattern(value, elements))
},
)
}