summaryrefslogtreecommitdiff
path: root/dom/asmjscache/test/file_slow.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/asmjscache/test/file_slow.js')
-rw-r--r--dom/asmjscache/test/file_slow.js73
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 0000000000..963422143c
--- /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();