diff --git a/src/lib.rs b/src/lib.rs index a72a6e3..7beb228 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +#![feature(test)] #![allow(dead_code)] mod builtins; diff --git a/src/vm/test.rs b/src/vm/test.rs index 9f6eb64..f92bbb3 100644 --- a/src/vm/test.rs +++ b/src/vm/test.rs @@ -1,3 +1,7 @@ +extern crate test; + +use test::{Bencher, black_box}; + use ecow::EcoString; use rpds::{ht_map_sync, vector_sync}; @@ -189,3 +193,15 @@ fn test_func() { int!(3), ); } + +#[test] +#[ignore] +fn test_fib() { + test_expr("let fib = n: if n == 1 || n == 2 then 1 else (fib (n - 1)) + (fib (n - 2)); in fib 30", int!(832040)) +} + +#[bench] +#[ignore] +fn bench_fib(b: &mut Bencher) { + b.iter(|| black_box(test_expr("let fib = n: if n == 1 || n == 2 then 1 else (fib (n - 1)) + (fib (n - 2)); in fib 20", int!(6765)))) +}