This commit refactors the `wasmtime-wast` crate to internally make it a bit more concise with less repetition. Additionally it also improves the error messages by guaranteeing that all failed tests have context indicating where the test was defined. It turns out there was also a bug in the previous implementation where an `AssertMalformed` directive with a `quote` module would accidentally skip all further tests. This has now been fixed, and all futher tests continued to pass except for the `simd_const.wast` test. This test has been disabled temporarily but once the `wasmparser` and `wast` crates are updated (being worked on independently) this should be possible to re-enable.
27 lines
950 B
Rust
27 lines
950 B
Rust
use std::path::Path;
|
|
use wasmtime::{Config, Engine, Store, Strategy};
|
|
use wasmtime_wast::WastContext;
|
|
|
|
include!(concat!(env!("OUT_DIR"), "/wast_testsuite_tests.rs"));
|
|
|
|
// Each of the tests included from `wast_testsuite_tests` will call this
|
|
// function which actually executes the `wast` test suite given the `strategy`
|
|
// to compile it.
|
|
fn run_wast(wast: &str, strategy: Strategy) -> anyhow::Result<()> {
|
|
let wast = Path::new(wast);
|
|
|
|
let simd = wast.iter().any(|s| s == "simd");
|
|
|
|
let mut cfg = Config::new();
|
|
cfg.wasm_simd(simd)
|
|
.wasm_reference_types(simd) // some simd tests assume multiple tables ok
|
|
.wasm_multi_value(wast.iter().any(|s| s == "multi-value"))
|
|
.strategy(strategy)?
|
|
.cranelift_debug_verifier(true);
|
|
let store = Store::new(&Engine::new(&cfg));
|
|
let mut wast_context = WastContext::new(store);
|
|
wast_context.register_spectest()?;
|
|
wast_context.run_file(wast)?;
|
|
Ok(())
|
|
}
|