testCloning.js (1625B)
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 = evaluate("(function() { " + USE_ASM + " function g() { return 43 } return g})", {fileName: null}); 8 assertEq(asmLink(code)(), 43); 9 assertEq(asmLink(code)(), 43); 10 11 var code = asmCompile('glob', 'ffis', 'buf', USE_ASM + 'var i32=new glob.Int32Array(buf); function g() { return i32[0]|0 } return g'); 12 var i32_1 = new Int32Array(BUF_MIN/4); 13 i32_1[0] = 42; 14 var i32_2 = new Int32Array(BUF_MIN/4); 15 i32_2[0] = 13; 16 assertEq(asmLink(code, this, null, i32_1.buffer)(), 42); 17 assertEq(asmLink(code, this, null, i32_2.buffer)(), 13); 18 var i32_3 = new Int32Array(4097); 19 assertAsmLinkFail(code, this, null, i32_3.buffer); 20 21 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'); 22 var calls1 = 0, calls2 = 0; 23 function ffi1() { calls1++ } 24 function ffi2() { calls2++ } 25 asmLink(code, null, {ffi:ffi1})(100000); 26 assertEq(calls1, 100000); 27 assertEq(calls2, 0); 28 calls1 = 0; 29 asmLink(code, null, {ffi:ffi2})(50000); 30 assertEq(calls1, 0); 31 assertEq(calls2, 50000); 32 33 var code = asmCompile(USE_ASM + 'var g = 0; function h() { g=(g+1)|0; return g|0 } return h'); 34 var h1 = code(); 35 assertEq(h1(), 1); 36 assertEq(h1(), 2); 37 var h2 = code(); 38 assertEq(h2(), 1); 39 assertEq(h1(), 3); 40 assertEq(h2(), 2); 41 assertEq(h1(), 4); 42 43 var code = asmCompile(USE_ASM + "return {}"); 44 var h1 = code(); 45 var h2 = code(); 46 assertEq(h1 === h2, false); 47 assertEq(Object.keys(h1).length, 0); 48 assertEq(Object.keys(h2).length, 0);