diff --git a/res/cases/v1/accumulate_u8.wasm b/res/cases/v1/accumulate_u8.wasm new file mode 100644 index 0000000..2ee5660 Binary files /dev/null and b/res/cases/v1/accumulate_u8.wasm differ diff --git a/res/cases/v1/accumulate_u8.wast b/res/cases/v1/accumulate_u8.wast new file mode 100644 index 0000000..9a1078a --- /dev/null +++ b/res/cases/v1/accumulate_u8.wast @@ -0,0 +1,94 @@ +;; /// @file accumulate_u8.cpp +;; #include // macro EMSCRIPTEN_KEEPALIVE +;; #include +;; #include +;; #include +;; extern "C" { +;; int32_t EMSCRIPTEN_KEEPALIVE accumulate_u8(const int32_t arlen, const uint8_t *ar) { +;; int32_t arsum = 0; +;; for (int32_t i=0; i env module is created + let env_instance = program.module("env").unwrap(); + // => linear memory is created + let env_memory = env_instance.memory(ItemIndex::Internal(0)).unwrap(); + + // Place the octet-sequence at index 0 in linear memory + let offset : u32 = 0; + let _ = env_memory.set(offset, BUF); + + // Set up the function argument list and invoke the function + let args = vec![RuntimeValue::I32(BUF.len() as i32), RuntimeValue::I32(offset as i32)]; + let execution_params = ExecutionParams::from(args); + let retval = module + .execute_export(FUNCTION_NAME, execution_params) + .expect(""); + + // For verification, repeat accumulation using native code + let accu = BUF.into_iter().fold(0 as i32, |a, b| a as i32 + *b as i32); + let exp_retval: Option = Some(RuntimeValue::I32(accu)); + + // Verify calculation from WebAssembly runtime is identical to expected result + assert_eq!(exp_retval, retval); +}