perl_test_generators/code/
expressions.rs1use proptest::prelude::*;
2use proptest::strategy::BoxedStrategy;
3
4use super::identifiers::scalar_variable;
5use super::literals::{integer_literal, single_quoted_string_literal};
6
7fn expression_leaf() -> BoxedStrategy<String> {
8 prop_oneof![scalar_variable(), integer_literal(), single_quoted_string_literal()].boxed()
9}
10
11pub fn simple_expression() -> BoxedStrategy<String> {
13 expression_leaf()
14 .prop_recursive(3, 24, 3, |inner| {
15 prop_oneof![
16 (inner.clone(), prop_oneof![Just('+'), Just('-'), Just('*')], inner.clone())
17 .prop_map(|(left, op, right)| format!("({left} {op} {right})")),
18 (inner.clone(), inner).prop_map(|(left, right)| format!("({left} . {right})")),
19 ]
20 })
21 .boxed()
22}