Add benchmarks
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
#![feature(plugin)]
|
#![feature(plugin, test)]
|
||||||
#![plugin(dynasm)]
|
#![plugin(dynasm)]
|
||||||
|
|
||||||
|
extern crate test;
|
||||||
|
|
||||||
extern crate capstone;
|
extern crate capstone;
|
||||||
extern crate failure;
|
extern crate failure;
|
||||||
extern crate wasmparser;
|
extern crate wasmparser;
|
||||||
|
|||||||
30
src/tests.rs
30
src/tests.rs
@@ -270,9 +270,7 @@ fn literals() {
|
|||||||
assert_eq!(execute_wat(code, 0, 0), 228);
|
assert_eq!(execute_wat(code, 0, 0), 228);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
const FIBONACCI: &str = r#"
|
||||||
fn fib() {
|
|
||||||
let code = r#"
|
|
||||||
(module
|
(module
|
||||||
(func $fib (param $n i32) (param $_unused i32) (result i32)
|
(func $fib (param $n i32) (param $_unused i32) (result i32)
|
||||||
(if (result i32)
|
(if (result i32)
|
||||||
@@ -319,12 +317,34 @@ fn fib() {
|
|||||||
)
|
)
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn fib() {
|
||||||
// fac(x) = y <=> (x, y)
|
// fac(x) = y <=> (x, y)
|
||||||
const FIB_SEQ: &[u32] = &[1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
|
const FIB_SEQ: &[u32] = &[1, 1, 2, 3, 5, 8, 13, 21, 34, 55];
|
||||||
|
|
||||||
|
let translated = translate_wat(FIBONACCI);
|
||||||
|
|
||||||
for x in 0..10 {
|
for x in 0..10 {
|
||||||
assert_eq!(execute_wat(code, x, 0), FIB_SEQ[x as usize]);
|
unsafe {
|
||||||
|
assert_eq!(
|
||||||
|
translated.execute_func::<_, u32>(0, (x, 0u32)),
|
||||||
|
FIB_SEQ[x as usize]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add a test that checks argument passing via the stack.
|
#[bench]
|
||||||
|
fn bench_compile(b: &mut test::Bencher) {
|
||||||
|
let wasm = wabt::wat2wasm(FIBONACCI).unwrap();
|
||||||
|
|
||||||
|
b.iter(|| test::black_box(translate(&wasm).unwrap()));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn bench_run(b: &mut test::Bencher) {
|
||||||
|
let wasm = wabt::wat2wasm(FIBONACCI).unwrap();
|
||||||
|
let module = translate(&wasm).unwrap();
|
||||||
|
|
||||||
|
b.iter(|| unsafe { module.execute_func::<_, u32>(0, (20, 0u32)) });
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user