X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=ts%2Ftest%2Findex.html;fp=ts%2Ftest%2Findex.html;h=9358a47c0ce1062642c88880000b2afa89d1af9a;hb=1b3420cff68c6f8c51eae23a466620097bd14cfb;hp=42f6815874d0693af62a6795a8941cee046b05c2;hpb=9f913b6589384e5a8ef7a3acdab8867d21bc0292;p=ldk-java diff --git a/ts/test/index.html b/ts/test/index.html index 42f68158..9358a47c 100644 --- a/ts/test/index.html +++ b/ts/test/index.html @@ -34,6 +34,11 @@ imports.env["abort"] = function() { console.error("ABORT"); }; + imports.env["js_log"] = function(argument) { + console.log("HI"); + const res = decodeUint8Array(argument, false); + console.log(res); + }; imports.env["js_free"] = function(argument) { console.log('integer passed from wasm:', argument); }; @@ -45,6 +50,48 @@ const { instance: wasmInstance } = await WebAssembly.instantiateStreaming(stream, imports); const wasm = wasmInstance.exports; + + const encodeUint8Array = (inputArray) => { + const cArrayPointer = wasm.TS_malloc(inputArray.length + 4); + const arrayLengthView = new Uint32Array(memory.buffer, cArrayPointer, 1); + arrayLengthView[0] = inputArray.length; + const arrayMemoryView = new Uint8Array(memory.buffer, cArrayPointer + 4, inputArray.length); + arrayMemoryView.set(inputArray); + return cArrayPointer; + } + + const encodeUint32Array = (inputArray) => { + const cArrayPointer = wasm.TS_malloc((inputArray.length + 1) * 4); + const arrayMemoryView = new Uint32Array(memory.buffer, cArrayPointer, inputArray.length); + arrayMemoryView[0] = inputArray.length; + arrayMemoryView.set(inputArray, 1); + return cArrayPointer; + } + + const getArrayLength = (arrayPointer) => { + const arraySizeViewer = new Uint32Array( + memory.buffer, // value + arrayPointer, // offset + 1 // one int + ); + return arraySizeViewer[0]; + } + const decodeUint8Array = (arrayPointer, free = true) => { + const arraySize = getArrayLength(arrayPointer); + const actualArrayViewer = new Uint8Array( + memory.buffer, // value + arrayPointer + 4, // offset (ignoring length bytes) + arraySize // uint8 count + ); + // Clone the contents, TODO: In the future we should wrap the Viewer in a class that + // will free the underlying memory when it becomes unreachable instead of copying here. + const actualArray = actualArrayViewer.slice(0, arraySize); + if (free) { + wasm.TS_free(arrayPointer); + } + return actualArray; + } + const result = wasm.TS_CResult_boolLightningErrorZ_ok(true); console.assert(wasm.TS_LDKCResult_boolLightningErrorZ_result_ok(result)); console.assert(wasm.TS_LDKCResult_boolLightningErrorZ_get_ok(result)); @@ -53,6 +100,15 @@ console.assert(wasm.TS_LDKCResult_boolLightningErrorZ_result_ok(result)); console.assert(!wasm.TS_LDKCResult_boolLightningErrorZ_get_ok(result)); wasm.TS_CResult_boolLightningErrorZ_free(result); + + var pk_arr = []; + for (var i = 0; i < 33; i++) { pk_arr[i] = 42; } + const pk_bytes = encodeUint8Array(pk_arr); + const pk_res = wasm.TS_CResult_PublicKeySecpErrorZ_ok(pk_bytes); + console.assert(wasm.TS_LDKCResult_PublicKeySecpErrorZ_result_ok(pk_res)); + const pk_res_bytes = wasm.TS_LDKCResult_PublicKeySecpErrorZ_get_ok(pk_res); + wasm.TS_LDKCResult_PublicKeySecpErrorZ_free(pk_res); + console.log("pass"); })();