| load(libdir + "asm.js"); |
| |
| function FunctionBody(f) { |
| var str = f.toString(); |
| var firstBrace = str.indexOf('{'); |
| var lastBrace = str.lastIndexOf('}'); |
| return str.substr(firstBrace + 1, lastBrace - firstBrace - 1); |
| } |
| |
| var F = (function (stdlib, n, heap) { |
| var Int16ArrayView = new stdlib.Int16Array(heap); |
| function f(i0, d1) { |
| i0 = i0 | 0 |
| d1 = +d1 |
| var d2 = 1. |
| var i3 = 0 |
| Int16ArrayView[0] = i0 |
| d2 = (.0 / .0) |
| switch ((i0 + i0) | 0) { |
| case 0: |
| d2 = .0 |
| break |
| }; |
| (((i3 - (0 < 0)) >>> ((.0 < -0) + (.0 > .0))) / 0) >> (0 + (((0 + 0) ^ |
| (9 > 0)) | 0)) |
| } |
| return f; |
| }); |
| |
| var compiled = asmCompile('stdlib', 'n', 'heap', USE_ASM + FunctionBody(F)); |
| asmLink(compiled, this, null, new ArrayBuffer(BUF_MIN))(); |
| |
| var F = (function(stdlib, n, heap) { |
| var Float64ArrayView = new stdlib.Float64Array(heap) |
| function f() { |
| Float64ArrayView[0] = +(0xffffffff / 0xffffffff >> 0) |
| } |
| return f; |
| }); |
| |
| var compiled = asmCompile('stdlib', 'n', 'heap', USE_ASM + FunctionBody(F)); |
| asmLink(compiled, this, null, new ArrayBuffer(BUF_MIN))(); |
| |
| function test0(x) |
| { |
| return (x >>> 0) % 10; |
| } |
| assertEq(test0(25), 5); |
| assertEq(test0(24), 4); |
| assertEq(test0(23), 3); |
| assertEq(test0(0), 0); |
| assertEq(test0(4294967295), 5); |
| |
| function test1(x) |
| { |
| return (x >>> 2) % 10; |
| } |
| assertEq(test1(25), 6); |
| assertEq(test1(24), 6); |
| assertEq(test1(23), 5); |
| assertEq(test1(4294967295), 3); |
| |
| function test2(x, y) |
| { |
| return (x >>> 0) % (y >>> 0); |
| } |
| assertEq(test2(25, 3), 1); |
| assertEq(test2(24, 4), 0); |
| assertEq(test2(4294967295, 10), 5); |
| assertEq(test2(23, 0), NaN); |
| |
| function test3() |
| { |
| function f(x, y) |
| { |
| x = x|0; |
| y = y|0; |
| var t = 0; |
| t = (((x|0) % (y|0))|0) > -2; |
| return t|0; |
| } |
| return f; |
| } |
| var compiled = asmCompile(USE_ASM + FunctionBody(test3)); |
| var linked = asmLink(compiled); |
| assertEq(linked(4294967290, 4294967295), 1); |
| assertEq(linked(4294967290, 4294967295), 1); |
| |
| function test4() |
| { |
| function f(x, y) |
| { |
| x = x|0; |
| y = y|0; |
| var t = 0; |
| t = (((x>>>0) % (y>>>0)) >>> 0) > 0; |
| return t|0; |
| } |
| return f; |
| } |
| var compiled = asmCompile(USE_ASM + FunctionBody(test4)); |
| var linked = asmLink(compiled); |
| assertEq(linked(4294967290, 4294967295), 1); |
| assertEq(linked(4294967290, 4294967295), 1); |
| |
| function test5() |
| { |
| function f(x, y) |
| { |
| x = x|0; |
| y = y|0; |
| var t = 0.; |
| t = +(((x>>>0) % (y>>>0)) >>> 0) * 1.01; |
| return +t; |
| } |
| return f; |
| } |
| var compiled = asmCompile(USE_ASM + FunctionBody(test5)); |
| var linked = asmLink(compiled); |
| assertEq(linked(4294967290, 4294967295), 4337916962.9); |
| assertEq(linked(4294967290, 4294967295), 4337916962.9); |
| |
| function test6() |
| { |
| function f(x, y) |
| { |
| x = x|0; |
| y = y|0; |
| return ((x>>>1) % (y>>>1))|0; |
| } |
| return f; |
| } |
| var compiled = asmCompile(USE_ASM + FunctionBody(test6)); |
| var linked = asmLink(compiled); |
| assertEq(linked(23847, 7), 1); |
| assertEq(linked(23848, 7), 2); |
| |
| function test7() |
| { |
| function f(x) |
| { |
| x = x|0; |
| return ((x>>>0) / 8)|0; |
| } |
| return f; |
| } |
| var compiled = asmCompile(USE_ASM + FunctionBody(test7)); |
| var linked = asmLink(compiled); |
| assertEq(linked(23847, 7), 2980); |
| assertEq(linked(23848, 7), 2981); |
| |
| function test8() |
| { |
| function f(i,j) |
| { |
| i=i|0;j=j|0; |
| return ((i>>>0)/(j>>>0))|0; |
| } |
| return f; |
| } |
| var compiled = asmCompile(USE_ASM + FunctionBody(test8)); |
| var linked = asmLink(compiled); |
| assertEq(linked(2147483647, 0), 0); |
| assertEq(linked(2147483646, 0), 0); |