feat: add a histrical wit-bindgen
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
many-arguments: func(
|
||||
a1: u64,
|
||||
a2: u64,
|
||||
a3: u64,
|
||||
a4: u64,
|
||||
a5: u64,
|
||||
a6: u64,
|
||||
a7: u64,
|
||||
a8: u64,
|
||||
a9: u64,
|
||||
a10: u64,
|
||||
a11: u64,
|
||||
a12: u64,
|
||||
a13: u64,
|
||||
a14: u64,
|
||||
a15: u64,
|
||||
a16: u64,
|
||||
a17: u64,
|
||||
a18: u64,
|
||||
a19: u64,
|
||||
a20: u64,
|
||||
)
|
||||
@@ -0,0 +1,68 @@
|
||||
from exports.bindings import Exports
|
||||
from imports.bindings import add_imports_to_linker, Imports
|
||||
import math;
|
||||
import sys
|
||||
import wasmtime
|
||||
|
||||
class MyImports:
|
||||
def many_arguments(self,
|
||||
a1: int,
|
||||
a2: int,
|
||||
a3: int,
|
||||
a4: int,
|
||||
a5: int,
|
||||
a6: int,
|
||||
a7: int,
|
||||
a8: int,
|
||||
a9: int,
|
||||
a10: int,
|
||||
a11: int,
|
||||
a12: int,
|
||||
a13: int,
|
||||
a14: int,
|
||||
a15: int,
|
||||
a16: int,
|
||||
a17: int,
|
||||
a18: int,
|
||||
a19: int,
|
||||
a20: int) -> None:
|
||||
assert(a1 == 1)
|
||||
assert(a2 == 2)
|
||||
assert(a3 == 3)
|
||||
assert(a4 == 4)
|
||||
assert(a5 == 5)
|
||||
assert(a6 == 6)
|
||||
assert(a7 == 7)
|
||||
assert(a8 == 8)
|
||||
assert(a9 == 9)
|
||||
assert(a10 == 10)
|
||||
assert(a11 == 11)
|
||||
assert(a12 == 12)
|
||||
assert(a13 == 13)
|
||||
assert(a14 == 14)
|
||||
assert(a15 == 15)
|
||||
assert(a16 == 16)
|
||||
assert(a17 == 17)
|
||||
assert(a18 == 18)
|
||||
assert(a19 == 19)
|
||||
assert(a20 == 20)
|
||||
|
||||
|
||||
def run(wasm_file: str) -> None:
|
||||
store = wasmtime.Store()
|
||||
module = wasmtime.Module.from_file(store.engine, wasm_file)
|
||||
linker = wasmtime.Linker(store.engine)
|
||||
linker.define_wasi()
|
||||
wasi = wasmtime.WasiConfig()
|
||||
wasi.inherit_stdout()
|
||||
wasi.inherit_stderr()
|
||||
store.set_wasi(wasi)
|
||||
|
||||
imports = MyImports()
|
||||
add_imports_to_linker(linker, store, imports)
|
||||
wasm = Exports(store, linker, module)
|
||||
|
||||
wasm.many_arguments(store, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14, 15, 16, 17, 18, 19, 20)
|
||||
|
||||
if __name__ == '__main__':
|
||||
run(sys.argv[1])
|
||||
@@ -0,0 +1,71 @@
|
||||
use anyhow::Result;
|
||||
|
||||
wit_bindgen_wasmtime::export!("../../tests/runtime/many_arguments/imports.wit");
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct MyImports {}
|
||||
|
||||
impl imports::Imports for MyImports {
|
||||
fn many_arguments(
|
||||
&mut self,
|
||||
a1: u64,
|
||||
a2: u64,
|
||||
a3: u64,
|
||||
a4: u64,
|
||||
a5: u64,
|
||||
a6: u64,
|
||||
a7: u64,
|
||||
a8: u64,
|
||||
a9: u64,
|
||||
a10: u64,
|
||||
a11: u64,
|
||||
a12: u64,
|
||||
a13: u64,
|
||||
a14: u64,
|
||||
a15: u64,
|
||||
a16: u64,
|
||||
a17: u64,
|
||||
a18: u64,
|
||||
a19: u64,
|
||||
a20: u64,
|
||||
) {
|
||||
assert_eq!(a1, 1);
|
||||
assert_eq!(a2, 2);
|
||||
assert_eq!(a3, 3);
|
||||
assert_eq!(a4, 4);
|
||||
assert_eq!(a5, 5);
|
||||
assert_eq!(a6, 6);
|
||||
assert_eq!(a7, 7);
|
||||
assert_eq!(a8, 8);
|
||||
assert_eq!(a9, 9);
|
||||
assert_eq!(a10, 10);
|
||||
assert_eq!(a11, 11);
|
||||
assert_eq!(a12, 12);
|
||||
assert_eq!(a13, 13);
|
||||
assert_eq!(a14, 14);
|
||||
assert_eq!(a15, 15);
|
||||
assert_eq!(a16, 16);
|
||||
assert_eq!(a17, 17);
|
||||
assert_eq!(a18, 18);
|
||||
assert_eq!(a19, 19);
|
||||
assert_eq!(a20, 20);
|
||||
}
|
||||
}
|
||||
|
||||
wit_bindgen_wasmtime::import!("../../tests/runtime/many_arguments/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.many_arguments(
|
||||
&mut store, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
import { addImportsToImports, Imports } from "./imports.js";
|
||||
import { Exports } from "./exports.js";
|
||||
import { getWasm, addWasiToImports } from "./helpers.js";
|
||||
|
||||
function assertEq(x: any, y: any) {
|
||||
if (x !== y)
|
||||
throw new Error(`${x} != ${y}`);
|
||||
}
|
||||
|
||||
function assert(x: boolean) {
|
||||
if (!x)
|
||||
throw new Error("assert failed");
|
||||
}
|
||||
|
||||
async function run() {
|
||||
const importObj = {};
|
||||
const imports: Imports = {
|
||||
manyArguments(
|
||||
a1,
|
||||
a2,
|
||||
a3,
|
||||
a4,
|
||||
a5,
|
||||
a6,
|
||||
a7,
|
||||
a8,
|
||||
a9,
|
||||
a10,
|
||||
a11,
|
||||
a12,
|
||||
a13,
|
||||
a14,
|
||||
a15,
|
||||
a16,
|
||||
a17,
|
||||
a18,
|
||||
a19,
|
||||
a20,
|
||||
) {
|
||||
assertEq(a1, 1n);
|
||||
assertEq(a2, 2n);
|
||||
assertEq(a3, 3n);
|
||||
assertEq(a4, 4n);
|
||||
assertEq(a5, 5n);
|
||||
assertEq(a6, 6n);
|
||||
assertEq(a7, 7n);
|
||||
assertEq(a8, 8n);
|
||||
assertEq(a9, 9n);
|
||||
assertEq(a10, 10n);
|
||||
assertEq(a11, 11n);
|
||||
assertEq(a12, 12n);
|
||||
assertEq(a13, 13n);
|
||||
assertEq(a14, 14n);
|
||||
assertEq(a15, 15n);
|
||||
assertEq(a16, 16n);
|
||||
assertEq(a17, 17n);
|
||||
assertEq(a18, 18n);
|
||||
assertEq(a19, 19n);
|
||||
assertEq(a20, 20n);
|
||||
},
|
||||
};
|
||||
let instance: WebAssembly.Instance;
|
||||
addImportsToImports(importObj, imports, name => instance.exports[name]);
|
||||
const wasi = addWasiToImports(importObj);
|
||||
|
||||
const wasm = new Exports();
|
||||
await wasm.instantiate(getWasm(), importObj);
|
||||
wasi.start(wasm.instance);
|
||||
instance = wasm.instance;
|
||||
|
||||
wasm.manyArguments(
|
||||
1n,
|
||||
2n,
|
||||
3n,
|
||||
4n,
|
||||
5n,
|
||||
6n,
|
||||
7n,
|
||||
8n,
|
||||
9n,
|
||||
10n,
|
||||
11n,
|
||||
12n,
|
||||
13n,
|
||||
14n,
|
||||
15n,
|
||||
16n,
|
||||
17n,
|
||||
18n,
|
||||
19n,
|
||||
20n,
|
||||
);
|
||||
}
|
||||
|
||||
await run()
|
||||
@@ -0,0 +1,22 @@
|
||||
many-arguments: func(
|
||||
a1: u64,
|
||||
a2: u64,
|
||||
a3: u64,
|
||||
a4: u64,
|
||||
a5: u64,
|
||||
a6: u64,
|
||||
a7: u64,
|
||||
a8: u64,
|
||||
a9: u64,
|
||||
a10: u64,
|
||||
a11: u64,
|
||||
a12: u64,
|
||||
a13: u64,
|
||||
a14: u64,
|
||||
a15: u64,
|
||||
a16: u64,
|
||||
a17: u64,
|
||||
a18: u64,
|
||||
a19: u64,
|
||||
a20: u64,
|
||||
)
|
||||
@@ -0,0 +1,72 @@
|
||||
#include <assert.h>
|
||||
#include <exports.h>
|
||||
#include <imports.h>
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
|
||||
void exports_many_arguments(
|
||||
uint64_t a1,
|
||||
uint64_t a2,
|
||||
uint64_t a3,
|
||||
uint64_t a4,
|
||||
uint64_t a5,
|
||||
uint64_t a6,
|
||||
uint64_t a7,
|
||||
uint64_t a8,
|
||||
uint64_t a9,
|
||||
uint64_t a10,
|
||||
uint64_t a11,
|
||||
uint64_t a12,
|
||||
uint64_t a13,
|
||||
uint64_t a14,
|
||||
uint64_t a15,
|
||||
uint64_t a16,
|
||||
uint64_t a17,
|
||||
uint64_t a18,
|
||||
uint64_t a19,
|
||||
uint64_t a20
|
||||
) {
|
||||
assert(a1 == 1);
|
||||
assert(a2 == 2);
|
||||
assert(a3 == 3);
|
||||
assert(a4 == 4);
|
||||
assert(a5 == 5);
|
||||
assert(a6 == 6);
|
||||
assert(a7 == 7);
|
||||
assert(a8 == 8);
|
||||
assert(a9 == 9);
|
||||
assert(a10 == 10);
|
||||
assert(a11 == 11);
|
||||
assert(a12 == 12);
|
||||
assert(a13 == 13);
|
||||
assert(a14 == 14);
|
||||
assert(a15 == 15);
|
||||
assert(a16 == 16);
|
||||
assert(a17 == 17);
|
||||
assert(a18 == 18);
|
||||
assert(a19 == 19);
|
||||
assert(a20 == 20);
|
||||
|
||||
imports_many_arguments(
|
||||
a1,
|
||||
a2,
|
||||
a3,
|
||||
a4,
|
||||
a5,
|
||||
a6,
|
||||
a7,
|
||||
a8,
|
||||
a9,
|
||||
a10,
|
||||
a11,
|
||||
a12,
|
||||
a13,
|
||||
a14,
|
||||
a15,
|
||||
a16,
|
||||
a17,
|
||||
a18,
|
||||
a19,
|
||||
a20
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
wit_bindgen_rust::import!("../../tests/runtime/many_arguments/imports.wit");
|
||||
wit_bindgen_rust::export!("../../tests/runtime/many_arguments/exports.wit");
|
||||
|
||||
use imports::*;
|
||||
|
||||
struct Exports;
|
||||
|
||||
impl exports::Exports for Exports {
|
||||
fn many_arguments(
|
||||
a1: u64,
|
||||
a2: u64,
|
||||
a3: u64,
|
||||
a4: u64,
|
||||
a5: u64,
|
||||
a6: u64,
|
||||
a7: u64,
|
||||
a8: u64,
|
||||
a9: u64,
|
||||
a10: u64,
|
||||
a11: u64,
|
||||
a12: u64,
|
||||
a13: u64,
|
||||
a14: u64,
|
||||
a15: u64,
|
||||
a16: u64,
|
||||
a17: u64,
|
||||
a18: u64,
|
||||
a19: u64,
|
||||
a20: u64,
|
||||
) {
|
||||
assert_eq!(a1, 1);
|
||||
assert_eq!(a2, 2);
|
||||
assert_eq!(a3, 3);
|
||||
assert_eq!(a4, 4);
|
||||
assert_eq!(a5, 5);
|
||||
assert_eq!(a6, 6);
|
||||
assert_eq!(a7, 7);
|
||||
assert_eq!(a8, 8);
|
||||
assert_eq!(a9, 9);
|
||||
assert_eq!(a10, 10);
|
||||
assert_eq!(a11, 11);
|
||||
assert_eq!(a12, 12);
|
||||
assert_eq!(a13, 13);
|
||||
assert_eq!(a14, 14);
|
||||
assert_eq!(a15, 15);
|
||||
assert_eq!(a16, 16);
|
||||
assert_eq!(a17, 17);
|
||||
assert_eq!(a18, 18);
|
||||
assert_eq!(a19, 19);
|
||||
assert_eq!(a20, 20);
|
||||
many_arguments(
|
||||
a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
|
||||
a20,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user