Allow if-expressions and switch-expressions in Engine::eval_expression.

This commit is contained in:
Stephen Chung
2022-08-26 23:10:58 +08:00
parent 204284f4f7
commit d80184ba14
3 changed files with 80 additions and 6 deletions

View File

@@ -12,8 +12,47 @@ fn test_expressions() -> Result<(), Box<EvalAltResult>> {
engine.eval_expression_with_scope::<INT>(&mut scope, "2 + (x + 10) * 2")?,
42
);
assert_eq!(
engine.eval_expression_with_scope::<INT>(&mut scope, "if x > 0 { 42 } else { 123 }")?,
42
);
assert!(engine
.eval_expression_with_scope::<INT>(&mut scope, "if x > 0 { 42 } else { 123 }")
.eval_expression_with_scope::<INT>(&mut scope, "if x > 0 { let y = 42; y } else { 123 }")
.is_err());
assert!(engine
.eval_expression_with_scope::<INT>(&mut scope, "if x > 0 { 42 } else { let y = 123; y }")
.is_err());
assert!(engine
.eval_expression_with_scope::<INT>(&mut scope, "if x > 0 { 42 } else {}")
.is_err());
assert_eq!(
engine.eval_expression_with_scope::<INT>(
&mut scope,
"
switch x {
0 => 1,
1..10 => 123,
10 => 42,
}
"
)?,
42
);
assert!(engine
.eval_expression_with_scope::<INT>(
&mut scope,
"
switch x {
0 => 1,
1..10 => {
let y = 123;
y
}
10 => 42,
}
"
)
.is_err());
assert!(engine.eval_expression::<()>("40 + 2;").is_err());