use crate::{Engine, Func, Linker, Module, Store, Val};
use std::vec::Vec;
fn wat2wasm(wat: &str) -> Vec<u8> {
wat::parse_str(wat).unwrap()
}
fn setup_test(wat: &str) -> (Store<()>, Func) {
let wasm = wat2wasm(wat);
let engine = Engine::default();
let mut store = <Store<()>>::new(&engine, ());
let linker = <Linker<()>>::new(&engine);
let module = Module::new(&engine, &wasm[..]).unwrap();
let instance = linker
.instantiate(&mut store, &module)
.unwrap()
.ensure_no_start(&mut store)
.unwrap();
let func = instance.get_func(&store, "test").unwrap();
(store, func)
}
#[test]
fn many_params() {
let wat = include_str!("wat/many_params.wat");
let (mut store, func) = setup_test(wat);
func.call(&mut store, &[0; 150].map(Val::I32), &mut [])
.unwrap();
}
#[test]
fn many_results() {
let wat = include_str!("wat/many_results.wat");
let (mut store, func) = setup_test(wat);
let mut results = [0; 150].map(Val::I32);
func.call(&mut store, &[], &mut results).unwrap();
for (i, result) in results.iter().enumerate() {
let &Val::I32(result) = result else {
panic!("unexpected result type at index {i}: {result:?}");
};
assert!(result as usize == i % 10);
}
}