Add fast operators to benchmarks.

This commit is contained in:
Stephen Chung 2022-09-03 15:48:00 +08:00
parent b3f6fa9ce8
commit 1ae0a4c761
4 changed files with 6505 additions and 7 deletions

View File

@ -21,6 +21,10 @@ Deprecated API
New features
------------
### Fast operators
* A new option `Engine::fast_operators` is introduced that short-circuits all built-in operators of built-in types for higher speed. User overloads are ignored. For operator-heavy scripts, this may yield substantial speed-up's.
### Fallible type iterators
* For very special needs, the ability to register fallible type iterators is added.
@ -30,10 +34,6 @@ New features
* `if`-expressions are allowed in `Engine::eval_expression` and `Engine::compile_expression` provided that both statement blocks each contain at most a single expression.
* `switch`-expressions are allowed in `Engine::eval_expression` and `Engine::compile_expression` provided that match actions are expressions only.
### Fast operators
* A new option `Engine::fast_operators` is introduced that short-circuits all built-in operators of built-in types for higher speed. User overloads are ignored. For operator-heavy scripts, this may yield substantial speed-up's.
Enhancements
------------

View File

@ -53,6 +53,23 @@ fn bench_eval_scope_longer(bench: &mut Bencher) {
bench.iter(|| engine.run_ast_with_scope(&mut scope, &ast).unwrap());
}
#[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());
}
#[bench]
fn bench_eval_scope_complex(bench: &mut Bencher) {
let script = r#"

6480
scripts/all_in_one.d.rhai Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,8 @@
let now = timestamp();
const MAX_NUMBER_TO_CHECK = 1_000_000; // 9592 primes <= 100000
const ANSWER = 78_498;
const MAX_NUMBER_TO_CHECK = 1_000_000;
let prime_mask = [];
prime_mask.pad(MAX_NUMBER_TO_CHECK + 1, true);
@ -27,6 +28,6 @@ for p in 2..=MAX_NUMBER_TO_CHECK {
print(`Total ${total_primes_found} primes <= ${MAX_NUMBER_TO_CHECK}`);
print(`Run time = ${now.elapsed} seconds.`);
if total_primes_found != 78_498 {
print("The answer is WRONG! Should be 78,498!");
if total_primes_found != ANSWER {
print(`The answer is WRONG! Should be ${ANSWER}!`);
}