mirror of
https://github.com/fluencelabs/crossmodule
synced 2025-04-24 21:52:14 +00:00
58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import {API, StringInvoke} from "../index";
|
|
|
|
class SelfAPI extends API {
|
|
|
|
static getApi(): API {
|
|
let invokeImpl = (ptr: i32, size: i32): i32 => {
|
|
let resultPtr = __alloc(size + 4, 1);
|
|
|
|
let request = String.UTF8.decodeUnsafe(ptr, size);
|
|
|
|
let strBuf = Uint8Array.wrap(String.UTF8.encode(request));
|
|
let strLen: i32 = request.length;
|
|
|
|
for (let i = 0; i < 4; i++) {
|
|
let b: u8 = (strLen >> i * 8) as u8 & 0xFF;
|
|
store<u8>(resultPtr + i, b);
|
|
}
|
|
|
|
for (let i = 4; i < strLen + 4; i++) {
|
|
store<u8>(resultPtr + i, strBuf[i - 4]);
|
|
}
|
|
|
|
return resultPtr;
|
|
};
|
|
|
|
let allocateImpl = (size: i32) :i32 => {
|
|
return __alloc(size, 1);
|
|
};
|
|
|
|
let deallocateImpl = (ptr: i32, size: i32): void => {
|
|
__free(ptr);
|
|
};
|
|
|
|
let storeImpl = (ptr: i32, byte: u8): void => {
|
|
store<u8>(ptr, byte);
|
|
};
|
|
|
|
let loadImpl = (ptr: i32): u8 => {
|
|
return load<u8>(ptr);
|
|
};
|
|
|
|
return new API(invokeImpl, allocateImpl, deallocateImpl, storeImpl, loadImpl);
|
|
}
|
|
}
|
|
|
|
describe("crossmodule", () => {
|
|
it("input should be equal to output", () => {
|
|
let stringInvoker = new StringInvoke(SelfAPI.getApi());
|
|
let request = "very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string vvery long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string very long string v";
|
|
let response = stringInvoker.invoke(request);
|
|
|
|
log<string>("request: " + request);
|
|
log<string>("response: " + response);
|
|
|
|
expect<string>(request).toStrictEqual(response, "request is equal to response");
|
|
});
|
|
});
|