diff options
Diffstat (limited to 'dom/asmjscache/test/file_slow.js')
-rw-r--r-- | dom/asmjscache/test/file_slow.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/dom/asmjscache/test/file_slow.js b/dom/asmjscache/test/file_slow.js new file mode 100644 index 000000000..963422143 --- /dev/null +++ b/dom/asmjscache/test/file_slow.js @@ -0,0 +1,73 @@ +function f1() { "use asm"; function g() {} return g } +if (this.jsFuns) { + ok(jsFuns.isAsmJSModule(f1), "f1 is an asm.js module"); + ok(jsFuns.isAsmJSFunction(f1()), "f1.g is an asm.js function"); +} + +function f2(stdlib, foreign, buffer) { + "use asm"; + var i32 = new stdlib.Int32Array(buffer); + function main(n) { + n = n|0; + var i = 0, sum = 0; + for (; (i|0) < (n|0); i=(i+1)|0) + sum = (sum + (i32[(i<<2)>>2]|0))|0; + return sum|0; + } + return main; +} +if (this.jsFuns) + ok(jsFuns.isAsmJSModule(f2), "f2 is an asm.js module"); +var i32 = new Int32Array(16384); // Smallest allowed buffer size is 64KBy +for (var i = 0; i < i32.length; i++) + i32[i] = i; +var f2Main = f2(this, null, i32.buffer); +if (this.jsFuns) + ok(jsFuns.isAsmJSFunction(f2Main), "f2.main is an asm.js function"); +if (f2Main(4) !== 6) + throw "f2Main(4)"; +if (f2Main(100) !== 4950) + throw "f2.main(100)"; +var sum = (((i32.length - 1) * i32.length) / 2); +if (f2Main(i32.length) !== sum) + throw "f2.main(" + i32.length + ")"; +if (f2Main(i32.length + 100) !== sum) + throw "f2.main(" + i32.length + ")"; + +function f3(stdlib, foreign, buffer) { + "use asm"; + var done = foreign.done; + var i32 = new stdlib.Int32Array(buffer); + function main() { + var i = 0, sum = 0; + while (1) { + for (i = 0; (i|0) < 1000; i=(i+1)|0) + sum = (sum + i)|0; + if (done(sum|0)|0) + break; + } + return sum|0; + } + return main; +} +var begin; +var lastSum; +function done(sum) { + if (sum !== ((lastSum + 499500)|0)) + throw "bad sum: " + sum + ", " + lastSum + ", " + ((lastSum + 499500)|0); + lastSum = sum; + return (Date.now() - begin) > 3000; +} +var f3Main = f3(this, {done:done}, i32.buffer); +if (this.jsFuns) + ok(jsFuns.isAsmJSFunction(f3Main), "f3.main is an asm.js function"); + +begin = Date.now(); +lastSum = 0; +if (f3Main() !== lastSum) + throw "f3.main()"; + +if (!this.jsFuns) + postMessage("ok"); +else + complete(); |