#![cfg(not(feature = "no_optimize"))] use rhai::{Engine, EvalAltResult, OptimizationLevel, INT}; #[test] fn test_optimizer_run() -> Result<(), Box> { fn run_test(engine: &mut Engine) -> Result<(), Box> { assert_eq!(engine.eval::(r"if true { 42 } else { 123 }")?, 42); assert_eq!( engine.eval::(r"if 1 == 1 || 2 > 3 { 42 } else { 123 }")?, 42 ); assert_eq!( engine.eval::(r#"const abc = "hello"; if abc < "foo" { 42 } else { 123 }"#)?, 123 ); Ok(()) } let mut engine = Engine::new(); engine.set_optimization_level(OptimizationLevel::None); run_test(&mut engine)?; engine.set_optimization_level(OptimizationLevel::Simple); run_test(&mut engine)?; engine.set_optimization_level(OptimizationLevel::Full); run_test(&mut engine)?; Ok(()) } #[test] fn test_optimizer_parse() -> Result<(), Box> { let mut engine = Engine::new(); engine.set_optimization_level(OptimizationLevel::Simple); let ast = engine.compile("{ const DECISION = false; if DECISION { 42 } }")?; assert!(format!("{:?}", ast).starts_with("AST([], ")); engine.set_optimization_level(OptimizationLevel::Full); let ast = engine.compile("if 1 == 2 { 42 }")?; assert!(format!("{:?}", ast).starts_with("AST([], ")); Ok(()) }