summaryrefslogtreecommitdiff
path: root/rust/src/parser.rs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud.bailly@iohk.io>2024-09-25 08:15:21 +0200
committerArnaud Bailly <arnaud.bailly@iohk.io>2024-09-25 08:15:21 +0200
commitd3781941c182fdc2971bac09b33b273e46232b00 (patch)
tree2e7f5f96c66d6675c03e7e79855369694a985aa5 /rust/src/parser.rs
parent24bc06c9d553a94306534c9d41cb632ebfd36aae (diff)
downloadlambda-nantes-d3781941c182fdc2971bac09b33b273e46232b00.tar.gz
Evaluate both side of application
Diffstat (limited to 'rust/src/parser.rs')
-rw-r--r--rust/src/parser.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/rust/src/parser.rs b/rust/src/parser.rs
index c85a425..9dc0bb8 100644
--- a/rust/src/parser.rs
+++ b/rust/src/parser.rs
@@ -250,12 +250,19 @@ mod tests {
type Strategy = BoxedStrategy<Self>;
fn arbitrary_with(_args: ()) -> Self::Strategy {
- prop_oneof![
+ let identifier = "\\pL(\\pL|\\pN)*";
+ let leaf = prop_oneof![
any::<i32>().prop_map(Num),
any::<bool>().prop_map(Bool),
// see https://unicode.org/reports/tr18/#General_Category_Property for one letter unicode categories
- "\\pL(\\pL|\\pN)*".prop_map(Sym),
- ]
+ identifier.prop_map(Sym),
+ ];
+ leaf.prop_recursive(4, 128, 5, move |inner| {
+ prop_oneof![
+ (inner.clone(), inner.clone()).prop_map(|(l, r)| App(Box::new(l), Box::new(r))),
+ (identifier, inner).prop_map(|(var, body)| Lam(var, Box::new(body))),
+ ]
+ })
.boxed()
}
}