summaryrefslogtreecommitdiff
path: root/rust/src/lambda.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/lambda.rs')
-rw-r--r--rust/src/lambda.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/rust/src/lambda.rs b/rust/src/lambda.rs
index 9b7045f..e22d210 100644
--- a/rust/src/lambda.rs
+++ b/rust/src/lambda.rs
@@ -1,5 +1,6 @@
use proptest::{
arbitrary::{any, any_with, arbitrary_with},
+ prelude::*,
strategy::{Strategy, ValueTree},
test_runner::TestRunner,
};
@@ -109,11 +110,20 @@ pub fn generate_expr(size: u32, runner: &mut TestRunner) -> Value {
let n = any::<u16>().new_tree(runner).unwrap().current();
Value::Num(n.into())
}
- 2 => Value::Sym(identifier().new_tree(runner).unwrap().current()),
+ 2 => Value::Sym(ascii_identifier().new_tree(runner).unwrap().current()),
+ 3 => Value::Sym(identifier().new_tree(runner).unwrap().current()),
+ 4 => simple_app().new_tree(runner).unwrap().current(),
_ => todo!(),
}
}
+fn simple_app() -> impl Strategy<Value = Value> {
+ let any_num = any::<i32>().prop_map(Value::Num);
+ let any_sym = identifier().prop_map(Value::Sym);
+ let leaf = prop_oneof![any_num, any_sym];
+ (leaf.clone(), leaf.clone()).prop_map(|(l, r)| Value::App(Box::new(l), Box::new(r)))
+}
+
#[cfg(test)]
mod lambda_test {
use crate::parser::parse;