js/src/jit-test/tests/asm.js/testExpressions.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 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0.0; return (i+j)|0 } return f");
     4 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0,j=0; return (i+j)|0 } return f");
     5 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0.0; return (i-j)|0 } return f");
     6 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0,j=0; return (i-j)|0 } return f");
     7 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0.0; return (i*j)|0 } return f");
     8 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0,j=0; return (i*j)|0 } return f");
     9 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0; return (i*j)|0 } return f");
    10 assertAsmTypeFail(USE_ASM + "function f() { var i=0; return (i*1048576)|0 } return f");
    11 assertAsmTypeFail(USE_ASM + "function f() { var i=0; return (i*-1048576)|0 } return f");
    12 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0; return (i + (j*4))|0 } return f");
    13 assertAsmTypeFail(USE_ASM + "function f() { var two30 = 1073741824; return (((two30 * 524288 * 16) + 1) & 1)|0 } return f");
    14 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0.0; return (i/j)|0 } return f");
    15 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0,j=0; return (i/j)|0 } return f");
    16 assertAsmTypeFail(USE_ASM + "function f() { var i=1,j=1; return (i/j)|0 } return f");
    17 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0.0; return (i%j)|0 } return f");
    18 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0,j=0; return (i%j)|0 } return f");
    19 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0,j=0; return (i<j)|0 } return f");
    20 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0.0; return (i<j)|0 } return f");
    21 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0; return (i<j)|0 } return f");
    22 assertAsmTypeFail(USE_ASM + "function f() { var i=0.0; return (-i)|0 } return f");
    23 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0; return (-(i+j))|0 } return f");
    25 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0,k=0; k = (i|0)/(k|0) } return f");
    26 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0,k=0; k = (i>>>0)/(k>>>0) } return f");
    27 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0,k=0; k = (i|0)%(k|0) } return f");
    28 assertAsmTypeFail(USE_ASM + "function f() { var i=0,j=0,k=0; k = (i>>>0)%(k>>>0) } return f");
    30 const UINT32_MAX = Math.pow(2,32)-1;
    31 const INT32_MIN = -Math.pow(2,31);
    32 const INT32_MAX = Math.pow(2,31)-1;
    34 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return (i*2)|0 } return f"));
    35 assertEq(f(0), 0);
    36 assertEq(f(INT32_MIN), (2*INT32_MIN)|0);
    37 assertEq(f(INT32_MAX), (2*INT32_MAX)|0);
    39 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return (2*i)|0 } return f"));
    40 assertEq(f(0), 0);
    41 assertEq(f(INT32_MIN), (2*INT32_MIN)|0);
    42 assertEq(f(INT32_MAX), (2*INT32_MAX)|0);
    44 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return (i*1048575)|0 } return f"));
    45 assertEq(f(0), 0);
    46 assertEq(f(2), (1048575*2)|0);
    47 assertEq(f(-1), (1048575*-1)|0);
    48 assertEq(f(INT32_MIN), (1048575*INT32_MIN)|0);
    49 assertEq(f(INT32_MAX), (1048575*INT32_MAX)|0);
    51 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return (1048575*i)|0 } return f"));
    52 assertEq(f(0), 0);
    53 assertEq(f(2), (1048575*2)|0);
    54 assertEq(f(-1), (1048575*-1)|0);
    55 assertEq(f(INT32_MIN), (1048575*INT32_MIN)|0);
    56 assertEq(f(INT32_MAX), (1048575*INT32_MAX)|0);
    58 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=+i; var j=0; j=~~i; return j|0 } return f"));
    59 assertEq(f(0), 0);
    60 assertEq(f(3.5), 3);
    61 assertEq(f(-3.5), -3);
    62 assertEq(f(INT32_MAX), INT32_MAX);
    63 assertEq(f(INT32_MIN), INT32_MIN);
    64 assertEq(f(UINT32_MAX), -1);
    66 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; var j=0.0; j=+~~i; return +j } return f"));
    67 assertEq(f(0), 0);
    68 assertEq(f(INT32_MAX), INT32_MAX);
    69 assertEq(f(INT32_MIN), INT32_MIN);
    71 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; var j=0.1; j=+(i>>>0); return +j } return f"));
    72 assertEq(f(0), 0);
    73 assertEq(f(INT32_MAX), INT32_MAX);
    74 assertEq(f(UINT32_MAX), UINT32_MAX);
    76 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return (-i)|0 } return f"));
    77 assertEq(f(0), 0);
    78 assertEq(f(-0), 0);
    79 assertEq(f(1), -1);
    80 assertEq(f(INT32_MAX), INT32_MIN+1);
    81 assertEq(f(INT32_MIN), INT32_MIN);
    83 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=+i; return +(-i) } return f"));
    84 assertEq(f(0), -0);
    85 assertEq(f(-0), 0);
    86 assertEq(f(-1), 1);
    87 assertEq(f(1), -1);
    88 assertEq(f(Math.pow(2,50)), -Math.pow(2,50));
    89 assertEq(f(1.54e20), -1.54e20);
    91 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return ((i|0) < (j|0))|0 } return f"));
    92 assertEq(f(0, 1), 1);
    93 assertEq(f(1, 0), 0);
    94 assertEq(f(1, 1), 0);
    95 assertEq(f(INT32_MIN, INT32_MAX), 1);
    96 assertEq(f(INT32_MAX, INT32_MIN), 0);
    97 assertEq(f(0, INT32_MAX), 1);
    98 assertEq(f(INT32_MAX, 0), 0);
    99 assertEq(f(INT32_MIN, 0), 1);
   100 assertEq(f(0, INT32_MIN), 0);
   101 assertEq(f(UINT32_MAX, 0), 1);
   102 assertEq(f(0, UINT32_MAX), 0);
   104 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return ((i>>>0) < (j>>>0))|0 } return f"));
   105 assertEq(f(0, 1), 1);
   106 assertEq(f(1, 0), 0);
   107 assertEq(f(1, 1), 0);
   108 assertEq(f(INT32_MIN, INT32_MAX), 0);
   109 assertEq(f(INT32_MAX, INT32_MIN), 1);
   110 assertEq(f(0, INT32_MAX), 1);
   111 assertEq(f(INT32_MAX, 0), 0);
   112 assertEq(f(INT32_MIN, 0), 0);
   113 assertEq(f(0, INT32_MIN), 1);
   114 assertEq(f(UINT32_MAX, 0), 0);
   115 assertEq(f(0, UINT32_MAX), 1);
   117 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k=0; k=(i|0)==(j|0); return k|0 } return f"))(1,2), 0);
   118 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k=0; k=(i|0)!=(j|0); return k|0 } return f"))(1,2), 1);
   119 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k=0; k=(i|0)<(j|0); return k|0 } return f"))(1,2), 1);
   120 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k=0; k=(i|0)>(j|0); return k|0 } return f"))(1,2), 0);
   121 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k=0; k=(i|0)<=(j|0); return k|0 } return f"))(1,2), 1);
   122 assertEq(asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k=0; k=(i|0)>=(j|0); return k|0 } return f"))(1,2), 0);
   124 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return ((i|0)/(j|0))|0 } return f"));
   125 assertEq(f(4,2), 2);
   126 assertEq(f(3,2), 1);
   127 assertEq(f(3,-2), -1);
   128 assertEq(f(-3,-2), 1);
   129 assertEq(f(0, -1), 0);
   130 assertEq(f(0, INT32_MAX), 0);
   131 assertEq(f(0, INT32_MIN), 0);
   132 assertEq(f(INT32_MAX, 0), 0);
   133 assertEq(f(INT32_MIN, 0), 0);
   134 assertEq(f(-1, INT32_MAX), 0);
   135 assertEq(f(-1, INT32_MIN), 0);
   136 assertEq(f(INT32_MAX, -1), -INT32_MAX);
   137 assertEq(f(INT32_MIN, -1), INT32_MIN); // !!
   138 assertEq(f(INT32_MAX, INT32_MAX), 1);
   139 assertEq(f(INT32_MAX, INT32_MIN), 0);
   140 assertEq(f(INT32_MIN, INT32_MAX), -1);
   141 assertEq(f(INT32_MIN, INT32_MIN), 1);
   143 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return ((i>>>0)/(j>>>0))|0 } return f"));
   144 assertEq(f(4,2), 2);
   145 assertEq(f(3,2), 1);
   146 assertEq(f(3,-2), 0);
   147 assertEq(f(-3,-2), 0);
   148 assertEq(f(0, -1), 0);
   149 assertEq(f(0, INT32_MAX), 0);
   150 assertEq(f(0, INT32_MIN), 0);
   151 assertEq(f(0, UINT32_MAX), 0);
   152 assertEq(f(INT32_MAX, 0), 0);
   153 assertEq(f(INT32_MIN, 0), 0);
   154 assertEq(f(UINT32_MAX, 0), 0);
   155 assertEq(f(-1, INT32_MAX), 2);
   156 assertEq(f(-1, INT32_MIN), 1);
   157 assertEq(f(-1, UINT32_MAX), 1);
   158 assertEq(f(INT32_MAX, -1), 0);
   159 assertEq(f(INT32_MIN, -1), 0);
   160 assertEq(f(UINT32_MAX, -1), 1);
   161 assertEq(f(INT32_MAX, INT32_MAX), 1);
   162 assertEq(f(INT32_MAX, INT32_MIN), 0);
   163 assertEq(f(UINT32_MAX, INT32_MAX), 2);
   164 assertEq(f(INT32_MAX, UINT32_MAX), 0);
   165 assertEq(f(UINT32_MAX, UINT32_MAX), 1);
   166 assertEq(f(INT32_MIN, INT32_MAX), 1);
   167 assertEq(f(INT32_MIN, UINT32_MAX), 0);
   168 assertEq(f(INT32_MIN, INT32_MIN), 1);
   170 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k = 0; k = (i|0)%(j|0)|0; return k|0 } return f"));
   171 assertEq(f(4,2), 0);
   172 assertEq(f(3,2), 1);
   173 assertEq(f(3,-2), 1);
   174 assertEq(f(-3,-2), -1);
   175 assertEq(f(0, -1), 0);
   176 assertEq(f(0, INT32_MAX), 0);
   177 assertEq(f(0, INT32_MIN), 0);
   178 assertEq(f(INT32_MAX, 0), 0);
   179 assertEq(f(INT32_MIN, 0), 0);
   180 assertEq(f(-1, INT32_MAX), -1);
   181 assertEq(f(-1, INT32_MIN), -1);
   182 assertEq(f(INT32_MAX, -1), 0);
   183 assertEq(f(INT32_MIN, -1), 0); // !!
   184 assertEq(f(INT32_MAX, INT32_MAX), 0);
   185 assertEq(f(INT32_MAX, INT32_MIN), INT32_MAX);
   186 assertEq(f(INT32_MIN, INT32_MAX), -1);
   187 assertEq(f(INT32_MIN, INT32_MIN), 0);
   189 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k = 0; k = (i|0)%4|0; return k|0 } return f"));
   190 assertEq(f(0), 0);
   191 assertEq(f(-1), -1);
   192 assertEq(f(-3), -3);
   193 assertEq(f(-4), 0);
   194 assertEq(f(INT32_MIN), 0);
   195 assertEq(f(3), 3);
   196 assertEq(f(4), 0);
   197 assertEq(f(INT32_MAX), 3);
   199 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var k = 0; k = (i>>>0)%(j>>>0)|0; return k|0 } return f"));
   200 assertEq(f(4,2), 0);
   201 assertEq(f(3,2), 1);
   202 assertEq(f(3,-2), 3);
   203 assertEq(f(-3,-2), -3);
   204 assertEq(f(0, -1), 0);
   205 assertEq(f(0, INT32_MAX), 0);
   206 assertEq(f(0, INT32_MIN), 0);
   207 assertEq(f(0, UINT32_MAX), 0);
   208 assertEq(f(INT32_MAX, 0), 0);
   209 assertEq(f(INT32_MIN, 0), 0);
   210 assertEq(f(UINT32_MAX, 0), 0);
   211 assertEq(f(-1, INT32_MAX), 1);
   212 assertEq(f(-1, INT32_MIN), INT32_MAX);
   213 assertEq(f(-1, UINT32_MAX), 0);
   214 assertEq(f(INT32_MAX, -1), INT32_MAX);
   215 assertEq(f(INT32_MIN, -1), INT32_MIN);
   216 assertEq(f(UINT32_MAX, -1), 0);
   217 assertEq(f(INT32_MAX, INT32_MAX), 0);
   218 assertEq(f(INT32_MAX, INT32_MIN), INT32_MAX);
   219 assertEq(f(UINT32_MAX, INT32_MAX), 1);
   220 assertEq(f(INT32_MAX, UINT32_MAX), INT32_MAX);
   221 assertEq(f(UINT32_MAX, UINT32_MAX), 0);
   222 assertEq(f(INT32_MIN, INT32_MAX), 1);
   223 assertEq(f(INT32_MIN, UINT32_MAX), INT32_MIN);
   224 assertEq(f(INT32_MIN, INT32_MIN), 0);
   226 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (4 / 2)|0 } return f"))(), 2);
   227 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (3 / 2)|0 } return f"))(), 1);
   228 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (4 % 2)|0 } return f"))(), 0);
   229 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (3 % 2)|0 } return f"))(), 1);
   231 assertAsmTypeFail(USE_ASM + "function f() { var i=42,j=1.1; return +(i?i:j) } return f");
   232 assertEq(asmLink(asmCompile(USE_ASM + "function f() { var i=42,j=1.1; return +(i?+(i|0):j) } return f"))(), 42);
   233 assertEq(asmLink(asmCompile(USE_ASM + "function f() { var i=42,j=1; return (i?i:j)|0 } return f"))(), 42);
   235 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; return ((i|0)>(j|0)?(i+10)|0:(j+100)|0)|0 } return f"));
   236 assertEq(f(2, 4), 104);
   237 assertEq(f(-2, -4), 8);
   239 var f = asmLink(asmCompile(USE_ASM + "function f(i,j,k) { i=i|0;j=j|0;k=k|0; return ((i|0)>(j|0) ? (i|0)>(k|0) ? i : k : (j|0)>(k|0) ? j : k)|0 } return f"));
   240 assertEq(f(1,2,3), 3);
   241 assertEq(f(1,3,2), 3);
   242 assertEq(f(2,1,3), 3);
   243 assertEq(f(2,3,1), 3);
   244 assertEq(f(3,1,2), 3);
   245 assertEq(f(3,2,1), 3);
   247 var f = asmLink(asmCompile(USE_ASM + "function f(i,j) { i=i|0;j=j|0; var a=0,b=0; a=i>>>0 < 4294967292; b=(i|0) < -4; return (j ? a : b)|0 } return f"));
   248 assertEq(f(1,true), 1);
   249 assertEq(f(-1,true), 0);
   250 assertEq(f(-5,true), 1);
   251 assertEq(f(1,false), 0);
   252 assertEq(f(-1,false), 0);
   253 assertEq(f(-5,false), 1);
   255 assertAsmTypeFail('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return (i32[0]+1)|0 } return f");
   256 new Float64Array(BUF_64KB)[0] = 2.3;
   257 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return +(f64[0] + 2.0) } return f"), this, null, BUF_64KB)(), 2.3+2);
   258 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return +(f64[0] - 2.0) } return f"), this, null, BUF_64KB)(), 2.3-2);
   259 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return +(f64[0] * 2.0) } return f"), this, null, BUF_64KB)(), 2.3*2);
   260 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return +(f64[0] / 2.0) } return f"), this, null, BUF_64KB)(), 2.3/2);
   261 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return +(f64[0] % 2.0) } return f"), this, null, BUF_64KB)(), 2.3%2);
   262 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "function f() { return +-f64[0] } return f"), this, null, BUF_64KB)(), -2.3);
   263 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "var sqrt=glob.Math.sqrt; function f() { return +sqrt(f64[0]) } return f"), this, null, BUF_64KB)(), Math.sqrt(2.3));
   264 new Int32Array(BUF_64KB)[0] = 42;
   265 assertEq(asmLink(asmCompile('glob','imp','b', USE_ASM + HEAP_IMPORTS + "var imul=glob.Math.imul; function f() { return imul(i32[0], 2)|0 } return f"), this, null, BUF_64KB)(), 84);
   267 // beware ye phis of comparisons and integers
   268 var f = asmLink(asmCompile(USE_ASM + "function g(i) { i=i|0; if (i) { i = ((i|0) == 2); } else { i=(i-1)|0 } return i|0; } return g "));
   269 assertEq(f(0), -1);
   270 assertEq(f(1), 0);
   271 assertEq(f(2), 1);
   272 var f = asmLink(asmCompile(USE_ASM + "function g(i) { i=i|0; if (i) { i = !i } else { i=(i-1)|0 } return i|0; } return g "));
   273 assertEq(f(0), -1);
   274 assertEq(f(1), 0);
   275 assertEq(f(2), 0);
   277 // beware ye constant-evaluate of boolean-producing operators
   278 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (4 | (2 == 2))|0 } return f"))(), 5);
   279 assertEq(asmLink(asmCompile(USE_ASM + "function f() { return (4 | (!2))|0 } return f"))(), 4);
   281 // get that order-of-operations right!
   282 var buf = new ArrayBuffer(4096);
   283 asmLink(asmCompile('glob','imp','buf', USE_ASM + "var i32=new glob.Int32Array(buf); var x=0; function a() { return x|0 } function b() { x=42; return 0 } function f() { i32[((b()|0) & 0x3) >> 2] = a()|0 } return f"), this, null, buf)();
   284 assertEq(new Int32Array(buf)[0], 42);
   286 assertEq(asmLink(asmCompile(USE_ASM + "function f() { var a=0,i=0; for (; ~~i!=4; i=(i+1)|0) { a = (a*5)|0; if (+(a>>>0) != 0.0) return 1; } return 0; } return f"))(), 0)
   288 // Signed integer division by a power of two.
   289 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return ((i|0)/1)|0; } return f;"));
   290 for (let i = 0; i < 31; i++) {
   291     assertEq(f(Math.pow(2,i)), Math.pow(2,i));
   292     assertEq(f(Math.pow(2,i)-1), Math.pow(2,i)-1);
   293     assertEq(f(-Math.pow(2,i)), -Math.pow(2,i));
   294     assertEq(f(-Math.pow(2,i)-1), -Math.pow(2,i)-1);
   295 }
   296 assertEq(f(INT32_MIN), INT32_MIN);
   297 assertEq(f(INT32_MAX), INT32_MAX);
   298 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return ((i|0)/2)|0; } return f;"));
   299 for (let i = 0; i < 31; i++) {
   300     assertEq(f(Math.pow(2,i)), (Math.pow(2,i)/2)|0);
   301     assertEq(f(Math.pow(2,i)-1), ((Math.pow(2,i)-1)/2)|0);
   302     assertEq(f(-Math.pow(2,i)), (-Math.pow(2,i)/2)|0);
   303     assertEq(f(-Math.pow(2,i)-1), ((-Math.pow(2,i)-1)/2)|0);
   304 }
   305 assertEq(f(INT32_MIN), (INT32_MIN/2)|0);
   306 assertEq(f(INT32_MAX), (INT32_MAX/2)|0);
   307 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return ((i|0)/4)|0; } return f;"));
   308 for (let i = 0; i < 31; i++) {
   309     assertEq(f(Math.pow(2,i)), (Math.pow(2,i)/4)|0);
   310     assertEq(f(Math.pow(2,i)-1), ((Math.pow(2,i)-1)/4)|0);
   311     assertEq(f(-Math.pow(2,i)), (-Math.pow(2,i)/4)|0);
   312     assertEq(f(-Math.pow(2,i)-1), ((-Math.pow(2,i)-1)/4)|0);
   313 }
   314 assertEq(f(INT32_MIN), (INT32_MIN/4)|0);
   315 assertEq(f(INT32_MAX), (INT32_MAX/4)|0);
   316 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return ((i|0)/1073741824)|0; } return f;"));
   317 for (let i = 0; i < 31; i++) {
   318     assertEq(f(Math.pow(2,i)), (Math.pow(2,i)/Math.pow(2,30))|0);
   319     assertEq(f(Math.pow(2,i)-1), ((Math.pow(2,i)-1)/Math.pow(2,30))|0);
   320     assertEq(f(-Math.pow(2,i)), (-Math.pow(2,i)/Math.pow(2,30))|0);
   321     assertEq(f(-Math.pow(2,i)-1), ((-Math.pow(2,i)-1)/Math.pow(2,30))|0);
   322 }
   323 assertEq(f(INT32_MIN), (INT32_MIN/Math.pow(2,30))|0);
   324 assertEq(f(INT32_MAX), (INT32_MAX/Math.pow(2,30))|0);
   325 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return ((((i|0)/1)|0)+i)|0; } return f;"));
   326 for (let i = 0; i < 31; i++) {
   327     assertEq(f(Math.pow(2,i)), (Math.pow(2,i) * 2)|0);
   328     assertEq(f(Math.pow(2,i) - 1), ((Math.pow(2,i) - 1) * 2)|0);
   329     assertEq(f(-Math.pow(2,i)), (-Math.pow(2,i) * 2)|0);
   330     assertEq(f(-Math.pow(2,i) - 1), ((-Math.pow(2,i) - 1) * 2)|0);
   331 }
   332 assertEq(f(INT32_MIN), (INT32_MIN * 2)|0);
   333 assertEq(f(INT32_MAX), (INT32_MAX * 2)|0);
   335 // Signed integer division by a power of two - with a non-negative numerator!
   336 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; i=(i&2147483647)|0; return ((i|0)/1)|0; } return f;"));
   337 for (let i = 0; i < 31; i++) {
   338     assertEq(f(Math.pow(2,i)), Math.pow(2,i));
   339     assertEq(f(Math.pow(2,i+1)-1), Math.pow(2,i+1)-1);
   340 }
   341 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; i=(i&2147483647)|0; return ((i|0)/2)|0; } return f;"));
   342 for (let i = 0; i < 31; i++) {
   343     assertEq(f(Math.pow(2,i)), (Math.pow(2,i)/2)|0);
   344     assertEq(f(Math.pow(2,i+1)-1), ((Math.pow(2,i+1)-1)/2)|0);
   345 }
   346 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; i=(i&2147483647)|0; return ((i|0)/4)|0; } return f;"));
   347 for (let i = 0; i < 31; i++) {
   348     assertEq(f(Math.pow(2,i)), (Math.pow(2,i)/4)|0);
   349     assertEq(f(Math.pow(2,i+1)-1), ((Math.pow(2,i+1)-1)/4)|0);
   350 }
   351 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; i=(i&2147483647)|0; return ((i|0)/1073741824)|0; } return f;"));
   352 for (let i = 0; i < 31; i++) {
   353     assertEq(f(Math.pow(2,i)), (Math.pow(2,i)/Math.pow(2,30))|0);
   354     assertEq(f(Math.pow(2,i+1)-1), ((Math.pow(2,i+1)-1)/Math.pow(2,30))|0);
   355 }
   356 var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; i=(i&2147483647)|0; return ((((i|0)/1)|0)+i)|0; } return f;"));
   357 for (let i = 0; i < 31; i++) {
   358     assertEq(f(Math.pow(2,i)), (Math.pow(2,i) * 2)|0);
   359     assertEq(f(Math.pow(2,i+1) - 1), ((Math.pow(2,i+1) - 1) * 2)|0);
   360 }

mercurial