diff --git a/benches/primes.rs b/benches/primes.rs new file mode 100644 index 00000000..4144d2ad --- /dev/null +++ b/benches/primes.rs @@ -0,0 +1,44 @@ +#![feature(test)] + +///! Test evaluating expressions +extern crate test; + +use rhai::{Engine, OptimizationLevel}; +use test::Bencher; + +// This script uses the Sieve of Eratosthenes to calculate prime numbers. + +const SCRIPT: &str = r#" +let now = timestamp(); + +const MAX_NUMBER_TO_CHECK = 1_000; // 168 primes <= 1000 + +let prime_mask = []; +prime_mask.pad(MAX_NUMBER_TO_CHECK, true); + +prime_mask[0] = prime_mask[1] = false; + +let total_primes_found = 0; + +for p in range(2, MAX_NUMBER_TO_CHECK) { + if prime_mask[p] { + total_primes_found += 1; + let i = 2 * p; + + while i < MAX_NUMBER_TO_CHECK { + prime_mask[i] = false; + i += p; + } + } +} +"#; + +#[bench] +fn bench_eval_primes(bench: &mut Bencher) { + let mut engine = Engine::new(); + engine.set_optimization_level(OptimizationLevel::None); + + let ast = engine.compile(SCRIPT).unwrap(); + + bench.iter(|| engine.consume_ast(&ast).unwrap()); +}