|
1 load(libdir + "asm.js"); |
|
2 |
|
3 var code = asmCompile(USE_ASM + "function g() { return 42 } return g"); |
|
4 assertEq(asmLink(code)(), 42); |
|
5 assertEq(asmLink(code)(), 42); |
|
6 |
|
7 var code = asmCompile('glob', 'ffis', 'buf', USE_ASM + 'var i32=new glob.Int32Array(buf); function g() { return i32[0]|0 } return g'); |
|
8 var i32_1 = new Int32Array(4096); |
|
9 i32_1[0] = 42; |
|
10 var i32_2 = new Int32Array(4096); |
|
11 i32_2[0] = 13; |
|
12 assertEq(asmLink(code, this, null, i32_1.buffer)(), 42); |
|
13 assertEq(asmLink(code, this, null, i32_2.buffer)(), 13); |
|
14 var i32_3 = new Int32Array(4097); |
|
15 assertAsmLinkFail(code, this, null, i32_3.buffer); |
|
16 |
|
17 var code = asmCompile('glob', 'ffis', USE_ASM + 'var ffi=ffis.ffi; function g(n) { n=n|0; var i=0; for(; (i|0)<(n|0); i=(i+1)|0) ffi() } return g'); |
|
18 var calls1 = 0, calls2 = 0; |
|
19 function ffi1() { calls1++ } |
|
20 function ffi2() { calls2++ } |
|
21 asmLink(code, null, {ffi:ffi1})(100000); |
|
22 assertEq(calls1, 100000); |
|
23 assertEq(calls2, 0); |
|
24 calls1 = 0; |
|
25 asmLink(code, null, {ffi:ffi2})(50000); |
|
26 assertEq(calls1, 0); |
|
27 assertEq(calls2, 50000); |
|
28 |
|
29 var code = asmCompile(USE_ASM + 'var g = 0; function h() { g=(g+1)|0; return g|0 } return h'); |
|
30 var h1 = code(); |
|
31 assertEq(h1(), 1); |
|
32 assertEq(h1(), 2); |
|
33 var h2 = code(); |
|
34 assertEq(h2(), 1); |
|
35 assertEq(h1(), 3); |
|
36 assertEq(h2(), 2); |
|
37 assertEq(h1(), 4); |
|
38 |
|
39 var code = asmCompile(USE_ASM + "return {}"); |
|
40 var h1 = code(); |
|
41 var h2 = code(); |
|
42 assertEq(h1 === h2, false); |
|
43 assertEq(Object.keys(h1).length, 0); |
|
44 assertEq(Object.keys(h2).length, 0); |