Replace wabt with rust tools (#5)

This commit is contained in:
Alexander Theißen
2022-01-30 13:05:07 +01:00
committed by GitHub
parent 8291876394
commit 374afe5700
18 changed files with 110 additions and 126 deletions
+6 -10
View File
@@ -5,6 +5,7 @@ use std::{
path::{Path, PathBuf},
};
use wasm_instrument as instrument;
use wasmparser::validate;
fn slurp<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
let mut f = fs::File::open(path)?;
@@ -19,11 +20,6 @@ fn dump<P: AsRef<Path>>(path: P, buf: &[u8]) -> io::Result<()> {
Ok(())
}
fn validate_wasm(binary: &[u8]) -> Result<(), wabt::Error> {
wabt::Module::read_binary(&binary, &Default::default())?.validate()?;
Ok(())
}
fn run_diff_test<F: FnOnce(&[u8]) -> Vec<u8>>(test_dir: &str, name: &str, test: F) {
// FIXME: not going to work on windows?
let mut fixture_path = PathBuf::from(concat!(env!("CARGO_MANIFEST_DIR"), "/tests/fixtures/",));
@@ -36,17 +32,17 @@ fn run_diff_test<F: FnOnce(&[u8]) -> Vec<u8>>(test_dir: &str, name: &str, test:
expected_path.push(test_dir);
expected_path.push(name);
let fixture_wat = slurp(&fixture_path).expect("Failed to read fixture");
let fixture_wasm = wabt::wat2wasm(fixture_wat).expect("Failed to read fixture");
validate_wasm(&fixture_wasm).expect("Fixture is invalid");
let fixture_wasm = wat::parse_file(&fixture_path).expect("Failed to read fixture");
validate(&fixture_wasm).expect("Fixture is invalid");
let expected_wat = slurp(&expected_path).unwrap_or_default();
let expected_wat = std::str::from_utf8(&expected_wat).expect("Failed to decode expected wat");
let actual_wasm = test(fixture_wasm.as_ref());
validate_wasm(&actual_wasm).expect("Result module is invalid");
validate(&actual_wasm).expect("Result module is invalid");
let actual_wat = wabt::wasm2wat(&actual_wasm).expect("Failed to convert result wasm to wat");
let actual_wat =
wasmprinter::print_bytes(&actual_wasm).expect("Failed to convert result wasm to wat");
if actual_wat != expected_wat {
println!("difference!");
+4 -4
View File
@@ -1,11 +1,11 @@
(module
(type (;0;) (func (result i32)))
(type (;1;) (func (param i32)))
(import "env" "gas" (func (;0;) (type 1)))
(import "env" "gas" (func $fibonacci_with_break (type 1)))
(func (;1;) (type 0) (result i32)
(local i32 i32)
i32.const 13
call 0
call $fibonacci_with_break
block ;; label = @1
i32.const 0
local.set 0
@@ -19,11 +19,11 @@
i32.const 1
br_if 0 (;@1;)
i32.const 5
call 0
call $fibonacci_with_break
local.get 0
local.get 1
local.tee 0
i32.add
local.set 1
end
local.get 1))
local.get 1))
+7 -7
View File
@@ -1,19 +1,19 @@
(module
(type (;0;) (func (param i32 i32) (result i32)))
(type (;1;) (func (param i32)))
(import "env" "gas" (func (;0;) (type 1)))
(func (;1;) (type 0) (param i32 i32) (result i32)
(import "env" "gas" (func $add_locals (type 1)))
(func $add (type 0) (param $x i32) (param $y i32) (result i32)
(local i32)
i32.const 5
call 0
local.get 0
local.get 1
call $add_locals
local.get $x
local.get $y
call 2
local.set 2
local.get 2)
(func (;2;) (type 0) (param i32 i32) (result i32)
i32.const 3
call 0
call $add_locals
local.get 0
local.get 1
i32.add))
i32.add))
+1 -1
View File
@@ -17,4 +17,4 @@
call 0
local.get 0
i32.popcnt
end))
end))
+1 -1
View File
@@ -21,4 +21,4 @@
call 0
block ;; label = @1
end)
(export "simple" (func 1)))
(export "simple" (func 1)))
+5 -5
View File
@@ -2,17 +2,17 @@
(type (;0;) (func (param i32 i32)))
(type (;1;) (func))
(type (;2;) (func (param i32)))
(import "env" "ext_return" (func (;0;) (type 0)))
(import "env" "ext_return" (func $ext_return (type 0)))
(import "env" "memory" (memory (;0;) 1 1))
(import "env" "gas" (func (;1;) (type 2)))
(import "env" "gas" (func $start (type 2)))
(func (;2;) (type 1)
i32.const 4
call 1
call $start
i32.const 8
i32.const 4
call 0
call $ext_return
unreachable)
(func (;3;) (type 1))
(export "call" (func 3))
(start 2)
(data (;0;) (i32.const 8) "\01\02\03\04"))
(data (;0;) (i32.const 8) "\01\02\03\04"))
@@ -48,5 +48,5 @@
i32.const 2
i32.sub
global.set 0)
(global (;0;) (mut i32) (i32.const 0))
(export "main" (func 2)))
(global (;0;) (mut i32) i32.const 0)
(export "main" (func 2)))
+14 -14
View File
@@ -2,20 +2,20 @@
(type (;0;) (func))
(type (;1;) (func (param i32 i32) (result i32)))
(type (;2;) (func (param i32)))
(import "env" "foo" (func (;0;) (type 0)))
(func (;1;) (type 1) (param i32 i32) (result i32)
(import "env" "foo" (func $foo (type 0)))
(func $i32.add (type 1) (param i32 i32) (result i32)
local.get 0
local.get 1
i32.add)
(func (;2;) (type 2) (param i32)
(local i32)
global.get 0
(func (;2;) (type 2) (param $arg i32)
(local $tmp i32)
global.get $counter
i32.const 1
i32.add
local.tee 1
global.set 0
local.get 1
local.get 0
local.tee $tmp
global.set $counter
local.get $tmp
local.get $arg
global.get 1
i32.const 4
i32.add
@@ -26,7 +26,7 @@
if ;; label = @1
unreachable
end
call 1
call $i32.add
global.get 1
i32.const 4
i32.sub
@@ -45,11 +45,11 @@
if ;; label = @1
unreachable
end
call 1
call $i32.add
global.get 1
i32.const 4
i32.sub
global.set 1)
(global (;0;) (mut i32) (i32.const 1))
(global (;1;) (mut i32) (i32.const 0))
(export "i32.add" (func 3)))
(global $counter (mut i32) i32.const 1)
(global (;1;) (mut i32) i32.const 0)
(export "i32.add" (func 3)))
+6 -6
View File
@@ -1,11 +1,11 @@
(module
(type (;0;) (func))
(type (;1;) (func (param i32 i32) (result i32)))
(import "env" "foo" (func (;0;) (type 0)))
(import "env" "boo" (func (;1;) (type 0)))
(import "env" "foo" (func $foo (type 0)))
(import "env" "boo" (func $boo (type 0)))
(func (;2;) (type 1) (param i32 i32) (result i32)
call 0
call 1
call $foo
call $boo
local.get 0
local.get 1
i32.add)
@@ -27,5 +27,5 @@
i32.const 4
i32.sub
global.set 0)
(global (;0;) (mut i32) (i32.const 0))
(export "i32.add" (func 3)))
(global (;0;) (mut i32) i32.const 0)
(export "i32.add" (func 3)))
@@ -1,8 +1,8 @@
(module
(type (;0;) (func))
(func (;0;) (type 0)
(func $one-group-many-locals (type 0)
(local i64 i64 i32))
(func (;1;) (type 0)
(func $main (type 0)
global.get 0
i32.const 5
i32.add
@@ -13,9 +13,9 @@
if ;; label = @1
unreachable
end
call 0
call $one-group-many-locals
global.get 0
i32.const 5
i32.sub
global.set 0)
(global (;0;) (mut i32) (i32.const 0)))
(global (;0;) (mut i32) i32.const 0))
+2 -2
View File
@@ -19,5 +19,5 @@
i32.const 3
i32.sub
global.set 0)
(global (;0;) (mut i32) (i32.const 0))
(export "simple" (func 1)))
(global (;0;) (mut i32) i32.const 0)
(export "simple" (func 1)))
+5 -5
View File
@@ -1,9 +1,9 @@
(module
(type (;0;) (func (param i32 i32)))
(type (;1;) (func))
(import "env" "ext_return" (func (;0;) (type 0)))
(import "env" "ext_return" (func $ext_return (type 0)))
(import "env" "memory" (memory (;0;) 1 1))
(func (;1;) (type 1)
(func $start (type 1)
(local i32))
(func (;2;) (type 1))
(func (;3;) (type 1)
@@ -17,7 +17,7 @@
if ;; label = @1
unreachable
end
call 1
call $start
global.get 0
i32.const 3
i32.sub
@@ -38,6 +38,6 @@
i32.const 2
i32.sub
global.set 0)
(global (;0;) (mut i32) (i32.const 0))
(global (;0;) (mut i32) i32.const 0)
(export "call" (func 4))
(start 3))
(start 3))
+6 -6
View File
@@ -2,7 +2,7 @@
(type (;0;) (func))
(type (;1;) (func (param i32)))
(type (;2;) (func (param i32 i32) (result i32)))
(import "env" "foo" (func (;0;) (type 0)))
(import "env" "foo" (func $foo (type 0)))
(func (;1;) (type 1) (param i32)
local.get 0
i32.const 0
@@ -16,13 +16,13 @@
if ;; label = @1
unreachable
end
call 2
call $i32.add
global.get 0
i32.const 4
i32.sub
global.set 0
drop)
(func (;2;) (type 2) (param i32 i32) (result i32)
(func $i32.add (type 2) (param i32 i32) (result i32)
local.get 0
local.get 1
i32.add)
@@ -56,12 +56,12 @@
if ;; label = @1
unreachable
end
call 2
call $i32.add
global.get 0
i32.const 4
i32.sub
global.set 0)
(table (;0;) 10 funcref)
(global (;0;) (mut i32) (i32.const 0))
(global (;0;) (mut i32) i32.const 0)
(export "i32.add" (func 4))
(elem (;0;) (i32.const 0) func 0 3 4))
(elem (;0;) (i32.const 0) func $foo 3 4))