005097bc429109deb66eac1236f8e56b4d261b5d
[WebKit-https.git] / JSTests / wasm / js-api / test_Instance.js
1 import * as assert from '../assert.js';
2 import Builder from '../Builder.js';
3
4 (function EmptyModule() {
5     const builder = new Builder();
6     const bin = builder.WebAssembly().get();
7     const module = new WebAssembly.Module(bin);
8     const instance = new WebAssembly.Instance(module);
9     assert.instanceof(instance, WebAssembly.Instance);
10 })();
11
12 (function ExportedAnswerI32() {
13     const builder = (new Builder())
14         .Type().End()
15         .Function().End()
16         .Export()
17             .Function("answer")
18         .End()
19         .Code()
20             .Function("answer", { params: [], ret: "i32" })
21                 .I32Const(42)
22                 .Return()
23             .End()
24         .End();
25     const bin = builder.WebAssembly().get();
26     const module = new WebAssembly.Module(bin);
27     const instance = new WebAssembly.Instance(module);
28     const result = instance.exports.answer();
29     assert.isA(result, "number");
30     assert.eq(result, 42);
31 })();
32
33 /* FIXME this currently crashes as detailed in https://bugs.webkit.org/show_bug.cgi?id=165591
34 (function Import() {
35     let counter = 0;
36     const counterSetter = v => counter = v;
37     const builder = (new Builder())
38         .Type().End()
39         .Import()
40             .Function("imp", "func", { params: ["i32"] })
41         .End()
42         .Function().End()
43         .Export()
44             .Function("changeCounter")
45         .End()
46         .Code()
47             .Function("changeCounter", { params: ["i32"] })
48                 .I32Const(42)
49                 .GetLocal(0)
50                 .I32Add()
51                 .Call(0) // Calls func(param[0] + 42).
52             .End()
53         .End();
54     const bin = builder.WebAssembly().get();
55     const module = new WebAssembly.Module(bin);
56     const instance = new WebAssembly.Instance(module, { imp: { func: counterSetter } });
57     instance.exports.changeCounter(0);
58     assert.eq(counter, 42);
59     instance.exports.changeCounter(1);
60     assert.eq(counter, 43);
61     instance.exports.changeCounter(42);
62     assert.eq(counter, 84);
63 })();
64 */