2020-04-13 11:26:16 +02:00
|
|
|
#![feature(test)]
|
|
|
|
|
|
|
|
///! Test evaluating with scope
|
|
|
|
extern crate test;
|
|
|
|
|
|
|
|
use rhai::{Engine, OptimizationLevel, Scope, INT};
|
|
|
|
use test::Bencher;
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn bench_eval_scope_single(bench: &mut Bencher) {
|
|
|
|
let script = "requests_made == requests_made";
|
|
|
|
|
|
|
|
let mut engine = Engine::new();
|
|
|
|
engine.set_optimization_level(OptimizationLevel::None);
|
|
|
|
|
|
|
|
let mut scope = Scope::new();
|
|
|
|
scope.push("requests_made", 99 as INT);
|
|
|
|
|
|
|
|
let ast = engine.compile_expression(script).unwrap();
|
|
|
|
|
2021-08-06 08:46:27 +02:00
|
|
|
bench.iter(|| engine.run_ast_with_scope(&mut scope, &ast).unwrap());
|
2020-04-13 11:26:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn bench_eval_scope_multiple(bench: &mut Bencher) {
|
|
|
|
let script = "requests_made > requests_succeeded";
|
|
|
|
|
|
|
|
let mut engine = Engine::new();
|
|
|
|
engine.set_optimization_level(OptimizationLevel::None);
|
|
|
|
|
|
|
|
let mut scope = Scope::new();
|
|
|
|
scope.push("requests_made", 99 as INT);
|
|
|
|
scope.push("requests_succeeded", 90 as INT);
|
|
|
|
|
|
|
|
let ast = engine.compile_expression(script).unwrap();
|
|
|
|
|
2021-08-06 08:46:27 +02:00
|
|
|
bench.iter(|| engine.run_ast_with_scope(&mut scope, &ast).unwrap());
|
2020-04-13 11:26:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#[bench]
|
|
|
|
fn bench_eval_scope_longer(bench: &mut Bencher) {
|
|
|
|
let script = "(requests_made * requests_succeeded / 100) >= 90";
|
|
|
|
|
|
|
|
let mut engine = Engine::new();
|
|
|
|
engine.set_optimization_level(OptimizationLevel::None);
|
|
|
|
|
|
|
|
let mut scope = Scope::new();
|
|
|
|
scope.push("requests_made", 99 as INT);
|
|
|
|
scope.push("requests_succeeded", 90 as INT);
|
|
|
|
|
|
|
|
let ast = engine.compile_expression(script).unwrap();
|
|
|
|
|
2021-08-06 08:46:27 +02:00
|
|
|
bench.iter(|| engine.run_ast_with_scope(&mut scope, &ast).unwrap());
|
2020-04-13 11:26:16 +02:00
|
|
|
}
|
|
|
|
|
2022-09-03 09:48:00 +02:00
|
|
|
#[bench]
|
|
|
|
fn bench_eval_scope_longer_fast_ops(bench: &mut Bencher) {
|
|
|
|
let script = "(requests_made * requests_succeeded / 100) >= 90";
|
|
|
|
|
|
|
|
let mut engine = Engine::new();
|
|
|
|
engine.set_optimization_level(OptimizationLevel::None);
|
|
|
|
engine.set_fast_operators(true);
|
|
|
|
|
|
|
|
let mut scope = Scope::new();
|
|
|
|
scope.push("requests_made", 99 as INT);
|
|
|
|
scope.push("requests_succeeded", 90 as INT);
|
|
|
|
|
|
|
|
let ast = engine.compile_expression(script).unwrap();
|
|
|
|
|
|
|
|
bench.iter(|| engine.run_ast_with_scope(&mut scope, &ast).unwrap());
|
|
|
|
}
|
|
|
|
|
2020-04-13 11:26:16 +02:00
|
|
|
#[bench]
|
|
|
|
fn bench_eval_scope_complex(bench: &mut Bencher) {
|
|
|
|
let script = r#"
|
|
|
|
2 > 1 &&
|
|
|
|
"something" != "nothing" ||
|
|
|
|
"2014-01-20" < "Wed Jul 8 23:07:35 MDT 2015" &&
|
|
|
|
Variable_name_with_spaces <= variableName &&
|
|
|
|
modifierTest + 1000 / 2 > (80 * 100 % 2)
|
|
|
|
"#;
|
|
|
|
|
|
|
|
let mut engine = Engine::new();
|
|
|
|
engine.set_optimization_level(OptimizationLevel::None);
|
|
|
|
|
|
|
|
let mut scope = Scope::new();
|
|
|
|
scope.push("Variable_name_with_spaces", 99 as INT);
|
|
|
|
scope.push("variableName", 90 as INT);
|
|
|
|
scope.push("modifierTest", 5 as INT);
|
|
|
|
|
|
|
|
let ast = engine.compile_expression(script).unwrap();
|
|
|
|
|
2021-08-06 08:46:27 +02:00
|
|
|
bench.iter(|| engine.run_ast_with_scope(&mut scope, &ast).unwrap());
|
2020-04-13 11:26:16 +02:00
|
|
|
}
|