feat: add a histrical wit-bindgen

This commit is contained in:
2023-01-01 00:25:48 +08:00
parent 01e8f5a959
commit aa50d63aec
419 changed files with 45283 additions and 1 deletions

View File

@@ -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,
)

View File

@@ -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])

View File

@@ -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(())
}

View File

@@ -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()

View File

@@ -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,
)

View File

@@ -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
);
}

View File

@@ -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,
);
}
}