pattern_core/test_utils/
generators.rs1#[cfg(test)]
8use proptest::prelude::*;
9
10#[cfg(test)]
11use crate::Pattern;
12
13#[cfg(test)]
20pub fn arbitrary_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
21 let leaf = any::<i32>().prop_map(Pattern::point);
22
23 leaf.prop_recursive(
24 5, 256, 10, |inner| {
28 (any::<i32>(), prop::collection::vec(inner, 0..10))
29 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
30 },
31 )
32}
33
34#[cfg(test)]
41pub fn arbitrary_pattern_string() -> impl Strategy<Value = Pattern<String>> {
42 let leaf = "[a-zA-Z0-9]{1,10}".prop_map(|s: String| Pattern::point(s));
43
44 leaf.prop_recursive(
45 5, 256, 10, |inner| {
49 ("[a-zA-Z0-9]{1,10}", prop::collection::vec(inner, 0..10))
50 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
51 },
52 )
53}
54
55#[cfg(test)]
59pub fn arbitrary_pattern_option() -> impl Strategy<Value = Pattern<Option<i32>>> {
60 let leaf = any::<Option<i32>>().prop_map(Pattern::point);
61
62 leaf.prop_recursive(
63 5, 256, 10, |inner| {
67 (any::<Option<i32>>(), prop::collection::vec(inner, 0..10))
68 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
69 },
70 )
71}
72
73#[cfg(test)]
77pub fn arbitrary_pattern_result() -> impl Strategy<Value = Pattern<Result<i32, String>>> {
78 let leaf = any::<Result<i32, String>>().prop_map(Pattern::point);
79
80 leaf.prop_recursive(
81 5, 256, 10, |inner| {
85 (
86 any::<Result<i32, String>>(),
87 prop::collection::vec(inner, 0..10),
88 )
89 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
90 },
91 )
92}
93
94#[cfg(test)]
96pub fn atomic_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
97 any::<i32>().prop_map(|v| Pattern::point(v))
98}
99
100#[cfg(test)]
102pub fn shallow_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
103 let leaf = any::<i32>().prop_map(|v| Pattern::point(v));
104
105 leaf.prop_recursive(
106 2, 64, 5, |inner| {
110 (any::<i32>(), prop::collection::vec(inner, 0..5))
111 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
112 },
113 )
114}
115
116#[cfg(test)]
118pub fn deep_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
119 let leaf = any::<i32>().prop_map(|v| Pattern::point(v));
120
121 leaf.prop_recursive(
122 20, 100, 3, |inner| {
126 (any::<i32>(), prop::collection::vec(inner, 0..3))
127 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
128 },
129 )
130}
131
132#[cfg(test)]
134pub fn wide_pattern_i32() -> impl Strategy<Value = Pattern<i32>> {
135 let leaf = any::<i32>().prop_map(|v| Pattern::point(v));
136
137 leaf.prop_recursive(
138 3, 1000, 50, |inner| {
142 (any::<i32>(), prop::collection::vec(inner, 0..50))
143 .prop_map(|(value, elements)| Pattern::pattern(value, elements))
144 },
145 )
146}