189 lines
4.8 KiB
Rust
189 lines
4.8 KiB
Rust
use anyhow::Result;
|
|
|
|
wit_bindgen_wasmtime::export!("../../tests/runtime/numbers/imports.wit");
|
|
|
|
#[derive(Default)]
|
|
pub struct MyImports {
|
|
scalar: u32,
|
|
}
|
|
|
|
impl imports::Imports for MyImports {
|
|
fn roundtrip_u8(&mut self, val: u8) -> u8 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_s8(&mut self, val: i8) -> i8 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_u16(&mut self, val: u16) -> u16 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_s16(&mut self, val: i16) -> i16 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_u32(&mut self, val: u32) -> u32 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_s32(&mut self, val: i32) -> i32 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_u64(&mut self, val: u64) -> u64 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_s64(&mut self, val: i64) -> i64 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_float32(&mut self, val: f32) -> f32 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_float64(&mut self, val: f64) -> f64 {
|
|
val
|
|
}
|
|
|
|
fn roundtrip_char(&mut self, val: char) -> char {
|
|
val
|
|
}
|
|
|
|
fn set_scalar(&mut self, val: u32) {
|
|
self.scalar = val;
|
|
}
|
|
|
|
fn get_scalar(&mut self) -> u32 {
|
|
self.scalar
|
|
}
|
|
}
|
|
|
|
wit_bindgen_wasmtime::import!("../../tests/runtime/numbers/exports.wit");
|
|
|
|
fn run(wasm: &str) -> Result<()> {
|
|
let (exports, mut store) = crate::instantiate(
|
|
wasm,
|
|
|linker| imports::add_to_linker(linker, |cx| -> &mut MyImports { &mut cx.imports }),
|
|
|store, module, linker| {
|
|
exports::Exports::instantiate(store, module, linker, |cx| &mut cx.exports)
|
|
},
|
|
)?;
|
|
|
|
exports.test_imports(&mut store)?;
|
|
assert_eq!(exports.roundtrip_u8(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_u8(&mut store, u8::min_value())?,
|
|
u8::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_u8(&mut store, u8::max_value())?,
|
|
u8::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_s8(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_s8(&mut store, i8::min_value())?,
|
|
i8::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_s8(&mut store, i8::max_value())?,
|
|
i8::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_u16(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_u16(&mut store, u16::min_value())?,
|
|
u16::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_u16(&mut store, u16::max_value())?,
|
|
u16::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_s16(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_s16(&mut store, i16::min_value())?,
|
|
i16::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_s16(&mut store, i16::max_value())?,
|
|
i16::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_u32(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_u32(&mut store, u32::min_value())?,
|
|
u32::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_u32(&mut store, u32::max_value())?,
|
|
u32::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_s32(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_s32(&mut store, i32::min_value())?,
|
|
i32::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_s32(&mut store, i32::max_value())?,
|
|
i32::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_u64(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_u64(&mut store, u64::min_value())?,
|
|
u64::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_u64(&mut store, u64::max_value())?,
|
|
u64::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_s64(&mut store, 1)?, 1);
|
|
assert_eq!(
|
|
exports.roundtrip_s64(&mut store, i64::min_value())?,
|
|
i64::min_value()
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_s64(&mut store, i64::max_value())?,
|
|
i64::max_value()
|
|
);
|
|
|
|
assert_eq!(exports.roundtrip_float32(&mut store, 1.0)?, 1.0);
|
|
assert_eq!(
|
|
exports.roundtrip_float32(&mut store, f32::INFINITY)?,
|
|
f32::INFINITY
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_float32(&mut store, f32::NEG_INFINITY)?,
|
|
f32::NEG_INFINITY
|
|
);
|
|
assert!(exports.roundtrip_float32(&mut store, f32::NAN)?.is_nan());
|
|
|
|
assert_eq!(exports.roundtrip_float64(&mut store, 1.0)?, 1.0);
|
|
assert_eq!(
|
|
exports.roundtrip_float64(&mut store, f64::INFINITY)?,
|
|
f64::INFINITY
|
|
);
|
|
assert_eq!(
|
|
exports.roundtrip_float64(&mut store, f64::NEG_INFINITY)?,
|
|
f64::NEG_INFINITY
|
|
);
|
|
assert!(exports.roundtrip_float64(&mut store, f64::NAN)?.is_nan());
|
|
|
|
assert_eq!(exports.roundtrip_char(&mut store, 'a')?, 'a');
|
|
assert_eq!(exports.roundtrip_char(&mut store, ' ')?, ' ');
|
|
assert_eq!(exports.roundtrip_char(&mut store, '🚩')?, '🚩');
|
|
|
|
exports.set_scalar(&mut store, 2)?;
|
|
assert_eq!(exports.get_scalar(&mut store)?, 2);
|
|
exports.set_scalar(&mut store, 4)?;
|
|
assert_eq!(exports.get_scalar(&mut store)?, 4);
|
|
|
|
Ok(())
|
|
}
|