Add full optimization test.
This commit is contained in:
parent
26ad454cb1
commit
20c535ecd3
@ -186,3 +186,39 @@ fn test_optimizer_reoptimize() -> Result<(), Box<EvalAltResult>> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_optimizer_full() -> Result<(), Box<EvalAltResult>> {
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
struct TestStruct(INT);
|
||||||
|
|
||||||
|
const SCRIPT: &str = "
|
||||||
|
const FOO = ts(40) + ts(2);
|
||||||
|
value(FOO)
|
||||||
|
";
|
||||||
|
|
||||||
|
let mut engine = Engine::new();
|
||||||
|
let mut scope = Scope::new();
|
||||||
|
|
||||||
|
engine.set_optimization_level(OptimizationLevel::Full);
|
||||||
|
|
||||||
|
engine
|
||||||
|
.register_type_with_name::<TestStruct>("TestStruct")
|
||||||
|
.register_fn("ts", |n: INT| TestStruct(n))
|
||||||
|
.register_fn("value", |ts: &mut TestStruct| ts.0)
|
||||||
|
.register_fn("+", |ts1: &mut TestStruct, ts2: TestStruct| {
|
||||||
|
TestStruct(ts1.0 + ts2.0)
|
||||||
|
});
|
||||||
|
|
||||||
|
let ast = engine.compile(SCRIPT)?;
|
||||||
|
|
||||||
|
assert_eq!(ast.statements().len(), 2);
|
||||||
|
|
||||||
|
assert_eq!(engine.eval_ast_with_scope::<INT>(&mut scope, &ast)?, 42);
|
||||||
|
|
||||||
|
assert_eq!(scope.len(), 1);
|
||||||
|
|
||||||
|
assert_eq!(scope.get_value::<TestStruct>("FOO").unwrap().0, 42);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user