js/src/jit-test/tests/asm.js/testFloatingPoint.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 load(libdir + "asm.js");
     3 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return 1.1 } return f"))(), 1.1);
     4 assertEq(asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return +(+(i|0) + .1) } return f"))(1), 1.1);
     5 assertEq(asmLink(asmCompile(USE_ASM + "function f(d) { d=+d; return +d } return f"))(1.1), 1.1);
     6 assertEq(asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d+e) } return f"))(1.0, .1), 1.1);
     7 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,e) { i=i|0;e=+e; return +(+~~i+e) } return f"))(1, .1), 1.1);
     8 assertEq(asmLink(asmCompile(USE_ASM + "function f(d,i) { d=+d;i=i|0; return +(d + +(i|0)) } return f"))(.1, 1), 1.1);
     9 assertEq(asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d-e) } return f"))(1.1, .8), (1.1-.8));
    10 assertEq(asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d*e) } return f"))(1.1, 2.2), (1.1*2.2));
    11 assertEq(asmLink(asmCompile(USE_ASM + "function g() { var i=2; return (~~(i=(i+1)|0))|0 } return g"))(), 3);
    13 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d<e)|0 } return f"));
    14 assertEq(f(1.1, 2.2), 1);
    15 assertEq(f(1.1, 1.1), 0);
    16 assertEq(f(2.1, 1.1), 0);
    18 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d<=e)|0 } return f"));
    19 assertEq(f(1.1, 2.2), 1);
    20 assertEq(f(1.1, 1.1), 1);
    21 assertEq(f(2.1, 1.1), 0);
    22 assertEq(f(NaN, 1.1), 0);
    23 assertEq(f(1.1, NaN), 0);
    24 assertEq(f(NaN, NaN), 0);
    26 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d>e)|0 } return f"));
    27 assertEq(f(2.1, 1.1), 1);
    28 assertEq(f(1.1, 1.1), 0);
    29 assertEq(f(1.1, 2.1), 0);
    30 assertEq(f(NaN, 1.1), 0);
    31 assertEq(f(1.1, NaN), 0);
    32 assertEq(f(NaN, NaN), 0);
    34 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d>=e)|0 } return f"));
    35 assertEq(f(2.1, 1.1), 1);
    36 assertEq(f(1.0, 1.1), 0);
    37 assertEq(f(1.1, 2.1), 0);
    38 assertEq(f(NaN, 1.1), 0);
    39 assertEq(f(1.1, NaN), 0);
    40 assertEq(f(NaN, NaN), 0);
    42 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d==e)|0 } return f"));
    43 assertEq(f(2.1, 1.1), 0);
    44 assertEq(f(1.1, 1.1), 1);
    45 assertEq(f(1.1, 2.1), 0);
    46 assertEq(f(NaN, 1.1), 0);
    47 assertEq(f(1.1, NaN), 0);
    48 assertEq(f(NaN, NaN), 0);
    50 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return (d!=e)|0 } return f"));
    51 assertEq(f(2.1, 1.1), 1);
    52 assertEq(f(1.1, 1.1), 0);
    53 assertEq(f(1.1, 2.1), 1);
    54 assertEq(f(NaN, 1.1), 1);
    55 assertEq(f(1.1, NaN), 1);
    56 assertEq(f(NaN, NaN), 1);
    58 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d/e) } return f"));
    59 assertEq(f(1.1, .1), (1.1/.1));
    60 assertEq(f(1.1, 0),  (1.1/0));
    61 assertEq(f(1.1, -0), (1.1/-0));
    63 var f = asmLink(asmCompile(USE_ASM + "function f(d,e) { d=+d;e=+e; return +(d%e) } return f"));
    64 assertEq(f(1.1, .1), (1.1%.1));
    65 assertEq(f(1.1, 0),  (1.1%0));
    66 assertEq(f(1.1, -0), (1.1%-0));
    68 var f = asmLink(asmCompile(USE_ASM + "function f(d) { d=+d; var i = 0; i = ~~d; return i|0 } return f"));
    69 assertEq(f(1.0), 1);
    70 assertEq(f(1.9), 1);
    71 assertEq(f(1.9999), 1);
    72 assertEq(f(2.0), 2);
    73 assertEq(f(Math.pow(2,40)), ~~Math.pow(2,40));
    74 assertEq(f(-Math.pow(2,40)), ~~-Math.pow(2,40));
    75 assertEq(f(4000000000), ~~4000000000);
    76 assertEq(f(-4000000000), ~~-4000000000);
    77 assertEq(f(NaN), 0);
    78 assertEq(f(Infinity), 0);
    79 assertEq(f(-Infinity), 0);
    81 assertAsmTypeFail(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +((i|0)/(j|0)) } return f");
    82 assertAsmTypeFail(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(i+j) } return f");
    83 assertAsmTypeFail(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(i-j) } return f");
    85 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(((i|0)/(j|0))|0) } return f"));
    86 assertEq(f(1,0), 0);
    87 assertEq(f(-Math.pow(2,31),-1), -Math.pow(2,31));
    89 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return +(((i|0)%(j|0))|0) } return f"));
    90 assertEq(f(1,0), 0);
    91 assertEq(f(-Math.pow(2,31),-1), 0);
    93 var {f,g} = asmLink(asmCompile(USE_ASM + "function f() { return 3.5 } function g(d) { d=+d; return +(d+3.5) } return {f:f,g:g}"));
    94 assertEq(f(), 3.5);
    95 assertEq(g(1), 1+3.5);
    97 var buf = new ArrayBuffer(4096);
    98 var f64 = new Float64Array(buf);
    99 var i32 = new Int32Array(buf);
   100 var u32 = new Uint32Array(buf);
   101 var f = asmLink(asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function f() { return +f64[0] } return f'), this, null, buf);
   102 f64[0] = 0;
   103 assertEq(f(), 0);
   104 f64[0] = -1;
   105 assertEq(f(), -1);
   106 f64[0] = 1;
   107 assertEq(f(), 1);
   108 f64[0] = Infinity;
   109 assertEq(f(), Infinity);
   110 f64[0] = -Infinity;
   111 assertEq(f(), -Infinity);
   113 function ffi(d) { str = String(d) }
   114 var g = asmLink(asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'var ffi=imp.ffi; function g() { ffi(+f64[0]) } return g'), this, {ffi:ffi}, buf);
   115 var h = asmLink(asmCompile('glob', 'imp', 'b', USE_ASM + HEAP_IMPORTS + 'function g() { return +(+f64[0] < 0.0 ? -+f64[0] : +f64[0]) } return g'), this, null, buf)
   117 function ffi1() { return 2.6 }
   118 assertEq(asmLink(asmCompile('glob', 'imp', USE_ASM + "var ffi1=imp.ffi1; function g() { var i=0,j=0.0; i=ffi1()|0; j=+ffi1(); return +(+(i|0)+j) } return g"), null, {ffi1:ffi1})(), 2+2.6);
   120 // that sounds dangerous!
   121 var a = [0,1,0xffff0000,0x7fff0000,0xfff80000,0x7ff80000,0xfffc0000,0x7ffc0000,0xffffffff,0x0000ffff,0x00008fff7];
   122 for (i of a) {
   123     for (j of a) {
   124         u32[0] = i;
   125         u32[1] = j;
   127         assertEq(f(), f64[0]);
   129         g();
   130         assertEq(str, String(f64[0]));
   132         assertEq(h(), Math.abs(f64[0]));
   133     }
   134 }

mercurial