diff options
Diffstat (limited to 'rust/src/lambda.rs')
| -rw-r--r-- | rust/src/lambda.rs | 12 |
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; |
