Skip to main content

perl_test_generators/code/
expressions.rs

1use 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
11/// Generate a small expression that should be valid Perl syntax.
12pub 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}