js/src/jit-test/tests/ion/divmodself.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 // |jit-test| ion-eager
     3 // bug 944963
     4 function bug944963(x, y) {
     5     (+(xy))(y % y)
     6 }
     7 for (var i = 0; i < 10; i++) {
     8     try {
     9         (function() {
    10             bug944963(0, (~Math.fround(-8)))
    11         })()
    12     } catch (e) {}
    13 }
    15 // bug 900437
    16 function bug900437() {
    17     var x = 0.0;
    18     for (var i = 0; i < 10; i++)
    19         -("") >> (x / x);
    20 }
    21 bug900437();
    22 bug900437();
    24 // bug 715460
    25 function f(x) {
    26     var a = x;
    27     return a / 10;
    28 }
    29 function g(x) {
    30     var y = x + 1;
    31     return y / y;
    32 }
    33 for (var i=0; i<10; i++)
    34     assertEq(f(i * 10), i);
    35 for (var i=0; i<10; i++)
    36     assertEq(g(i), 1);
    38 // bug 939893
    39 function bug939893() {
    40     bug_g();
    41 }
    42 function bug_g() {
    43     bug_h(undefined >>> 0, +undefined);
    44 }
    45 function bug_h(x) {
    46     Math.max(x ? ((x / x) | 0) : 0);
    47 }
    48 for (var a = 0; a < 2; ++a) {
    49   bug939893();
    50 }
    52 // bug 945860
    53 function bug945860(x) {
    54     return (x % x);
    55 }
    56 for (var i = 0; i < 2; i++) {
    57     try {
    58         (function() {
    59             assertEq(bug945860(1), 0);
    60         })()
    61     } catch (e) {}
    62 }
    64 // Assorted tests.
    66 function sdiv_truncate(y) {
    67   return (y / y)|0;
    68 }
    69 assertEq(sdiv_truncate(5), 1);
    70 assertEq(sdiv_truncate(1), 1);
    71 assertEq(sdiv_truncate(-1), 1);
    72 assertEq(sdiv_truncate(0), 0);
    73 assertEq(sdiv_truncate(-0), 0);
    74 assertEq(sdiv_truncate(1.1), 1);
    75 assertEq(sdiv_truncate(-1.1), 1);
    76 assertEq(sdiv_truncate(Infinity), 0);
    77 assertEq(sdiv_truncate(NaN), 0);
    78 assertEq(sdiv_truncate(undefined), 0);
    79 assertEq(sdiv_truncate(null), 0);
    81 function sdiv(y) {
    82   return y / y;
    83 }
    84 assertEq(sdiv(5), 1);
    85 assertEq(sdiv(1), 1);
    86 assertEq(sdiv(-1), 1);
    87 assertEq(sdiv(0), NaN);
    88 assertEq(sdiv(-0), NaN);
    89 assertEq(sdiv(1.1), 1);
    90 assertEq(sdiv(-1.1), 1);
    91 assertEq(sdiv(Infinity), NaN);
    92 assertEq(sdiv(NaN), NaN);
    93 assertEq(sdiv(undefined), NaN);
    94 assertEq(sdiv(null), NaN);
    96 function udiv_truncate(y) {
    97   var yu = y>>>0;
    98   return (yu / yu)|0;
    99 }
   100 assertEq(udiv_truncate(5), 1);
   101 assertEq(udiv_truncate(1), 1);
   102 assertEq(udiv_truncate(-1), 1);
   103 assertEq(udiv_truncate(0), 0);
   104 assertEq(udiv_truncate(-0), 0);
   105 assertEq(udiv_truncate(1.1), 1);
   106 assertEq(udiv_truncate(-1.1), 1);
   107 assertEq(udiv_truncate(Infinity), 0);
   108 assertEq(udiv_truncate(NaN), 0);
   109 assertEq(udiv_truncate(undefined), 0);
   110 assertEq(udiv_truncate(null), 0);
   112 function shifted_udiv_truncate(y) {
   113   var yu = y>>>1;
   114   return (yu / yu)|0;
   115 }
   116 assertEq(shifted_udiv_truncate(5), 1);
   117 assertEq(shifted_udiv_truncate(2), 1);
   118 assertEq(shifted_udiv_truncate(1), 0);
   119 assertEq(shifted_udiv_truncate(-1), 1);
   120 assertEq(shifted_udiv_truncate(0), 0);
   121 assertEq(shifted_udiv_truncate(-0), 0);
   122 assertEq(shifted_udiv_truncate(1.1), 0);
   123 assertEq(shifted_udiv_truncate(-1.1), 1);
   124 assertEq(shifted_udiv_truncate(Infinity), 0);
   125 assertEq(shifted_udiv_truncate(NaN), 0);
   126 assertEq(shifted_udiv_truncate(undefined), 0);
   127 assertEq(shifted_udiv_truncate(null), 0);
   129 function udiv(y) {
   130   var yu = y>>>0;
   131   return yu / yu;
   132 }
   133 assertEq(udiv(5), 1);
   134 assertEq(udiv(1), 1);
   135 assertEq(udiv(-1), 1);
   136 assertEq(udiv(0), NaN);
   137 assertEq(udiv(-0), NaN);
   138 assertEq(udiv(1.1), 1);
   139 assertEq(udiv(-1.1), 1);
   140 assertEq(udiv(Infinity), NaN);
   141 assertEq(udiv(NaN), NaN);
   142 assertEq(udiv(undefined), NaN);
   143 assertEq(udiv(null), NaN);
   145 function shifted_udiv(y) {
   146   var yu = y>>>1;
   147   return yu / yu;
   148 }
   149 assertEq(shifted_udiv(5), 1);
   150 assertEq(shifted_udiv(2), 1);
   151 assertEq(shifted_udiv(1), NaN);
   152 assertEq(shifted_udiv(-1), 1);
   153 assertEq(shifted_udiv(0), NaN);
   154 assertEq(shifted_udiv(-0), NaN);
   155 assertEq(shifted_udiv(1.1), NaN);
   156 assertEq(shifted_udiv(-1.1), 1);
   157 assertEq(shifted_udiv(Infinity), NaN);
   158 assertEq(shifted_udiv(NaN), NaN);
   159 assertEq(shifted_udiv(undefined), NaN);
   160 assertEq(shifted_udiv(null), NaN);
   162 function smod_truncate(y) {
   163   return (y % y)|0;
   164 }
   165 assertEq(smod_truncate(5), 0);
   166 assertEq(smod_truncate(1), 0);
   167 assertEq(smod_truncate(-1), 0);
   168 assertEq(smod_truncate(0), 0);
   169 assertEq(smod_truncate(-0), 0);
   170 assertEq(smod_truncate(1.1), 0);
   171 assertEq(smod_truncate(-1.1), 0);
   172 assertEq(smod_truncate(Infinity), 0);
   173 assertEq(smod_truncate(NaN), 0);
   174 assertEq(smod_truncate(undefined), 0);
   175 assertEq(smod_truncate(null), 0);
   177 function smod(y) {
   178   return y % y;
   179 }
   180 assertEq(smod(5), 0);
   181 assertEq(smod(1), 0);
   182 assertEq(smod(-1), -0);
   183 assertEq(smod(0), NaN);
   184 assertEq(smod(-0), NaN);
   185 assertEq(smod(1.1), 0);
   186 assertEq(smod(-1.1), -0);
   187 assertEq(smod(Infinity), NaN);
   188 assertEq(smod(NaN), NaN);
   189 assertEq(smod(undefined), NaN);
   190 assertEq(smod(null), NaN);
   192 function umod_truncate(y) {
   193   var yu = y>>>0;
   194   return (yu % yu)|0;
   195 }
   196 assertEq(umod_truncate(5), 0);
   197 assertEq(umod_truncate(1), 0);
   198 assertEq(umod_truncate(-1), 0);
   199 assertEq(umod_truncate(0), 0);
   200 assertEq(umod_truncate(-0), 0);
   201 assertEq(umod_truncate(1.1), 0);
   202 assertEq(umod_truncate(-1.1), 0);
   203 assertEq(umod_truncate(Infinity), 0);
   204 assertEq(umod_truncate(NaN), 0);
   205 assertEq(umod_truncate(undefined), 0);
   206 assertEq(umod_truncate(null), 0);
   208 function shifted_umod_truncate(y) {
   209   var yu = y>>>1;
   210   return (yu % yu)|0;
   211 }
   212 assertEq(shifted_umod_truncate(5), 0);
   213 assertEq(shifted_umod_truncate(2), 0);
   214 assertEq(shifted_umod_truncate(1), 0);
   215 assertEq(shifted_umod_truncate(-1), 0);
   216 assertEq(shifted_umod_truncate(0), 0);
   217 assertEq(shifted_umod_truncate(-0), 0);
   218 assertEq(shifted_umod_truncate(1.1), 0);
   219 assertEq(shifted_umod_truncate(-1.1), 0);
   220 assertEq(shifted_umod_truncate(Infinity), 0);
   221 assertEq(shifted_umod_truncate(NaN), 0);
   222 assertEq(shifted_umod_truncate(undefined), 0);
   223 assertEq(shifted_umod_truncate(null), 0);
   225 function umod(y) {
   226   var yu = y>>>0;
   227   return yu % yu;
   228 }
   229 assertEq(umod(5), 0);
   230 assertEq(umod(1), 0);
   231 assertEq(umod(-1), 0);
   232 assertEq(umod(0), NaN);
   233 assertEq(umod(-0), NaN);
   234 assertEq(umod(1.1), 0);
   235 assertEq(umod(-1.1), 0);
   236 assertEq(umod(Infinity), NaN);
   237 assertEq(umod(NaN), NaN);
   238 assertEq(umod(undefined), NaN);
   239 assertEq(umod(null), NaN);
   241 function shifted_umod(y) {
   242   var yu = y>>>1;
   243   return yu % yu;
   244 }
   245 assertEq(shifted_umod(5), 0);
   246 assertEq(shifted_umod(2), 0);
   247 assertEq(shifted_umod(1), NaN);
   248 assertEq(shifted_umod(-1), 0);
   249 assertEq(shifted_umod(0), NaN);
   250 assertEq(shifted_umod(-0), NaN);
   251 assertEq(shifted_umod(1.1), NaN);
   252 assertEq(shifted_umod(-1.1), 0);
   253 assertEq(shifted_umod(Infinity), NaN);
   254 assertEq(shifted_umod(NaN), NaN);
   255 assertEq(shifted_umod(undefined), NaN);
   256 assertEq(shifted_umod(null), NaN);
   258 function sdiv_truncate_nonzero(y) {
   259   if (y == 0) return -202;
   260   return (y / y)|0;
   261 }
   262 assertEq(sdiv_truncate_nonzero(5), 1);
   263 assertEq(sdiv_truncate_nonzero(1), 1);
   264 assertEq(sdiv_truncate_nonzero(-1), 1);
   265 assertEq(sdiv_truncate_nonzero(0), -202);
   266 assertEq(sdiv_truncate_nonzero(-0), -202);
   267 assertEq(sdiv_truncate_nonzero(1.1), 1);
   268 assertEq(sdiv_truncate_nonzero(-1.1), 1);
   269 assertEq(sdiv_truncate_nonzero(Infinity), 0);
   270 assertEq(sdiv_truncate_nonzero(NaN), 0);
   271 assertEq(sdiv_truncate_nonzero(undefined), 0);
   272 assertEq(sdiv_truncate_nonzero(null), 0);
   274 function sdiv_nonzero(y) {
   275   if (y == 0) return -202;
   276   return y / y;
   277 }
   278 assertEq(sdiv_nonzero(5), 1);
   279 assertEq(sdiv_nonzero(1), 1);
   280 assertEq(sdiv_nonzero(-1), 1);
   281 assertEq(sdiv_nonzero(0), -202);
   282 assertEq(sdiv_nonzero(-0), -202);
   283 assertEq(sdiv_nonzero(1.1), 1);
   284 assertEq(sdiv_nonzero(-1.1), 1);
   285 assertEq(sdiv_nonzero(Infinity), NaN);
   286 assertEq(sdiv_nonzero(NaN), NaN);
   287 assertEq(sdiv_nonzero(undefined), NaN);
   288 assertEq(sdiv_nonzero(null), NaN);
   290 function udiv_truncate_nonzero(y) {
   291   var yu = y>>>0;
   292   if (yu == 0) return -202;
   293   return (yu / yu)|0;
   294 }
   295 assertEq(udiv_truncate_nonzero(5), 1);
   296 assertEq(udiv_truncate_nonzero(1), 1);
   297 assertEq(udiv_truncate_nonzero(-1), 1);
   298 assertEq(udiv_truncate_nonzero(0), -202);
   299 assertEq(udiv_truncate_nonzero(-0), -202);
   300 assertEq(udiv_truncate_nonzero(1.1), 1);
   301 assertEq(udiv_truncate_nonzero(-1.1), 1);
   302 assertEq(udiv_truncate_nonzero(Infinity), -202);
   303 assertEq(udiv_truncate_nonzero(NaN), -202);
   304 assertEq(udiv_truncate_nonzero(undefined), -202);
   305 assertEq(udiv_truncate_nonzero(null), -202);
   307 function shifted_udiv_truncate_nonzero(y) {
   308   var yu = y>>>1;
   309   if (yu == 0) return -202;
   310   return (yu / yu)|0;
   311 }
   312 assertEq(shifted_udiv_truncate_nonzero(5), 1);
   313 assertEq(shifted_udiv_truncate_nonzero(2), 1);
   314 assertEq(shifted_udiv_truncate_nonzero(1), -202);
   315 assertEq(shifted_udiv_truncate_nonzero(-1), 1);
   316 assertEq(shifted_udiv_truncate_nonzero(0), -202);
   317 assertEq(shifted_udiv_truncate_nonzero(-0), -202);
   318 assertEq(shifted_udiv_truncate_nonzero(1.1), -202);
   319 assertEq(shifted_udiv_truncate_nonzero(-1.1), 1);
   320 assertEq(shifted_udiv_truncate_nonzero(Infinity), -202);
   321 assertEq(shifted_udiv_truncate_nonzero(NaN), -202);
   322 assertEq(shifted_udiv_truncate_nonzero(undefined), -202);
   323 assertEq(shifted_udiv_truncate_nonzero(null), -202);
   325 function udiv_nonzero(y) {
   326   var yu = y>>>0;
   327   if (yu == 0) return -202;
   328   return yu / yu;
   329 }
   330 assertEq(udiv_nonzero(5), 1);
   331 assertEq(udiv_nonzero(1), 1);
   332 assertEq(udiv_nonzero(-1), 1);
   333 assertEq(udiv_nonzero(0), -202);
   334 assertEq(udiv_nonzero(-0), -202);
   335 assertEq(udiv_nonzero(1.1), 1);
   336 assertEq(udiv_nonzero(-1.1), 1);
   337 assertEq(udiv_nonzero(Infinity), -202);
   338 assertEq(udiv_nonzero(NaN), -202);
   339 assertEq(udiv_nonzero(undefined), -202);
   340 assertEq(udiv_nonzero(null), -202);
   342 function shifted_udiv_nonzero(y) {
   343   var yu = y>>>1;
   344   if (yu == 0) return -202;
   345   return yu / yu;
   346 }
   347 assertEq(shifted_udiv_nonzero(5), 1);
   348 assertEq(shifted_udiv_nonzero(2), 1);
   349 assertEq(shifted_udiv_nonzero(1), -202);
   350 assertEq(shifted_udiv_nonzero(-1), 1);
   351 assertEq(shifted_udiv_nonzero(0), -202);
   352 assertEq(shifted_udiv_nonzero(-0), -202);
   353 assertEq(shifted_udiv_nonzero(1.1), -202);
   354 assertEq(shifted_udiv_nonzero(-1.1), 1);
   355 assertEq(shifted_udiv_nonzero(Infinity), -202);
   356 assertEq(shifted_udiv_nonzero(NaN), -202);
   357 assertEq(shifted_udiv_nonzero(undefined), -202);
   358 assertEq(shifted_udiv_nonzero(null), -202);
   360 function smod_truncate_nonzero(y) {
   361   if (y == 0) return -202;
   362   return (y % y)|0;
   363 }
   364 assertEq(smod_truncate_nonzero(5), 0);
   365 assertEq(smod_truncate_nonzero(1), 0);
   366 assertEq(smod_truncate_nonzero(-1), 0);
   367 assertEq(smod_truncate_nonzero(0), -202);
   368 assertEq(smod_truncate_nonzero(-0), -202);
   369 assertEq(smod_truncate_nonzero(1.1), 0);
   370 assertEq(smod_truncate_nonzero(-1.1), 0);
   371 assertEq(smod_truncate_nonzero(Infinity), 0);
   372 assertEq(smod_truncate_nonzero(NaN), 0);
   373 assertEq(smod_truncate_nonzero(undefined), 0);
   374 assertEq(smod_truncate_nonzero(null), 0);
   376 function smod_nonzero(y) {
   377   if (y == 0) return -202;
   378   return y % y;
   379 }
   380 assertEq(smod_nonzero(5), 0);
   381 assertEq(smod_nonzero(1), 0);
   382 assertEq(smod_nonzero(-1), -0);
   383 assertEq(smod_nonzero(0), -202);
   384 assertEq(smod_nonzero(-0), -202);
   385 assertEq(smod_nonzero(1.1), 0);
   386 assertEq(smod_nonzero(-1.1), -0);
   387 assertEq(smod_nonzero(Infinity), NaN);
   388 assertEq(smod_nonzero(NaN), NaN);
   389 assertEq(smod_nonzero(undefined), NaN);
   390 assertEq(smod_nonzero(null), NaN);
   392 function umod_truncate_nonzero(y) {
   393   var yu = y>>>0;
   394   if (yu == 0) return -202;
   395   return (yu % yu)|0;
   396 }
   397 assertEq(umod_truncate_nonzero(5), 0);
   398 assertEq(umod_truncate_nonzero(1), 0);
   399 assertEq(umod_truncate_nonzero(-1), 0);
   400 assertEq(umod_truncate_nonzero(0), -202);
   401 assertEq(umod_truncate_nonzero(-0), -202);
   402 assertEq(umod_truncate_nonzero(1.1), 0);
   403 assertEq(umod_truncate_nonzero(-1.1), 0);
   404 assertEq(umod_truncate_nonzero(Infinity), -202);
   405 assertEq(umod_truncate_nonzero(NaN), -202);
   406 assertEq(umod_truncate_nonzero(undefined), -202);
   407 assertEq(umod_truncate_nonzero(null), -202);
   409 function shifted_umod_truncate_nonzero(y) {
   410   var yu = y>>>1;
   411   if (yu == 0) return -202;
   412   return (yu % yu)|0;
   413 }
   414 assertEq(shifted_umod_truncate_nonzero(5), 0);
   415 assertEq(shifted_umod_truncate_nonzero(2), 0);
   416 assertEq(shifted_umod_truncate_nonzero(1), -202);
   417 assertEq(shifted_umod_truncate_nonzero(-1), 0);
   418 assertEq(shifted_umod_truncate_nonzero(0), -202);
   419 assertEq(shifted_umod_truncate_nonzero(-0), -202);
   420 assertEq(shifted_umod_truncate_nonzero(1.1), -202);
   421 assertEq(shifted_umod_truncate_nonzero(-1.1), 0);
   422 assertEq(shifted_umod_truncate_nonzero(Infinity), -202);
   423 assertEq(shifted_umod_truncate_nonzero(NaN), -202);
   424 assertEq(shifted_umod_truncate_nonzero(undefined), -202);
   425 assertEq(shifted_umod_truncate_nonzero(null), -202);
   427 function umod_nonzero(y) {
   428   var yu = y>>>0;
   429   if (yu == 0) return -202;
   430   return yu % yu;
   431 }
   432 assertEq(umod_nonzero(5), 0);
   433 assertEq(umod_nonzero(1), 0);
   434 assertEq(umod_nonzero(-1), 0);
   435 assertEq(umod_nonzero(0), -202);
   436 assertEq(umod_nonzero(-0), -202);
   437 assertEq(umod_nonzero(1.1), 0);
   438 assertEq(umod_nonzero(-1.1), 0);
   439 assertEq(umod_nonzero(Infinity), -202);
   440 assertEq(umod_nonzero(NaN), -202);
   441 assertEq(umod_nonzero(undefined), -202);
   442 assertEq(umod_nonzero(null), -202);
   444 function shifted_umod_nonzero(y) {
   445   var yu = y>>>1;
   446   if (yu == 0) return -202;
   447   return yu % yu;
   448 }
   449 assertEq(shifted_umod_nonzero(5), 0);
   450 assertEq(shifted_umod_nonzero(2), 0);
   451 assertEq(shifted_umod_nonzero(1), -202);
   452 assertEq(shifted_umod_nonzero(-1), 0);
   453 assertEq(shifted_umod_nonzero(0), -202);
   454 assertEq(shifted_umod_nonzero(-0), -202);
   455 assertEq(shifted_umod_nonzero(1.1), -202);
   456 assertEq(shifted_umod_nonzero(-1.1), 0);
   457 assertEq(shifted_umod_nonzero(Infinity), -202);
   458 assertEq(shifted_umod_nonzero(NaN), -202);
   459 assertEq(shifted_umod_nonzero(undefined), -202);
   460 assertEq(shifted_umod_nonzero(null), -202);
   462 function sdiv_truncate_positive(y) {
   463   if (y <= 0) return -202;
   464   return (y / y)|0;
   465 }
   466 assertEq(sdiv_truncate_positive(5), 1);
   467 assertEq(sdiv_truncate_positive(1), 1);
   468 assertEq(sdiv_truncate_positive(-1), -202);
   469 assertEq(sdiv_truncate_positive(0), -202);
   470 assertEq(sdiv_truncate_positive(-0), -202);
   471 assertEq(sdiv_truncate_positive(1.1), 1);
   472 assertEq(sdiv_truncate_positive(-1.1), -202);
   473 assertEq(sdiv_truncate_positive(Infinity), 0);
   474 assertEq(sdiv_truncate_positive(NaN), 0);
   475 assertEq(sdiv_truncate_positive(undefined), 0);
   476 assertEq(sdiv_truncate_positive(null), -202);
   478 function sdiv_positive(y) {
   479   if (y <= 0) return -202;
   480   return y / y;
   481 }
   482 assertEq(sdiv_positive(5), 1);
   483 assertEq(sdiv_positive(1), 1);
   484 assertEq(sdiv_positive(-1), -202);
   485 assertEq(sdiv_positive(0), -202);
   486 assertEq(sdiv_positive(-0), -202);
   487 assertEq(sdiv_positive(1.1), 1);
   488 assertEq(sdiv_positive(-1.1), -202);
   489 assertEq(sdiv_positive(Infinity), NaN);
   490 assertEq(sdiv_positive(NaN), NaN);
   491 assertEq(sdiv_positive(undefined), NaN);
   492 assertEq(sdiv_positive(null), -202);
   494 function udiv_truncate_positive(y) {
   495   var yu = y>>>0;
   496   if (yu <= 0) return -202;
   497   return (yu / yu)|0;
   498 }
   499 assertEq(udiv_truncate_positive(5), 1);
   500 assertEq(udiv_truncate_positive(1), 1);
   501 assertEq(udiv_truncate_positive(-1), 1);
   502 assertEq(udiv_truncate_positive(0), -202);
   503 assertEq(udiv_truncate_positive(-0), -202);
   504 assertEq(udiv_truncate_positive(1.1), 1);
   505 assertEq(udiv_truncate_positive(-1.1), 1);
   506 assertEq(udiv_truncate_positive(Infinity), -202);
   507 assertEq(udiv_truncate_positive(NaN), -202);
   508 assertEq(udiv_truncate_positive(undefined), -202);
   509 assertEq(udiv_truncate_positive(null), -202);
   511 function shifted_udiv_truncate_positive(y) {
   512   var yu = y>>>1;
   513   if (yu <= 0) return -202;
   514   return (yu / yu)|0;
   515 }
   516 assertEq(shifted_udiv_truncate_positive(5), 1);
   517 assertEq(shifted_udiv_truncate_positive(2), 1);
   518 assertEq(shifted_udiv_truncate_positive(1), -202);
   519 assertEq(shifted_udiv_truncate_positive(-1), 1);
   520 assertEq(shifted_udiv_truncate_positive(0), -202);
   521 assertEq(shifted_udiv_truncate_positive(-0), -202);
   522 assertEq(shifted_udiv_truncate_positive(1.1), -202);
   523 assertEq(shifted_udiv_truncate_positive(-1.1), 1);
   524 assertEq(shifted_udiv_truncate_positive(Infinity), -202);
   525 assertEq(shifted_udiv_truncate_positive(NaN), -202);
   526 assertEq(shifted_udiv_truncate_positive(undefined), -202);
   527 assertEq(shifted_udiv_truncate_positive(null), -202);
   529 function udiv_positive(y) {
   530   var yu = y>>>0;
   531   if (yu <= 0) return -202;
   532   return yu / yu;
   533 }
   534 assertEq(udiv_positive(5), 1);
   535 assertEq(udiv_positive(1), 1);
   536 assertEq(udiv_positive(-1), 1);
   537 assertEq(udiv_positive(0), -202);
   538 assertEq(udiv_positive(-0), -202);
   539 assertEq(udiv_positive(1.1), 1);
   540 assertEq(udiv_positive(-1.1), 1);
   541 assertEq(udiv_positive(Infinity), -202);
   542 assertEq(udiv_positive(NaN), -202);
   543 assertEq(udiv_positive(undefined), -202);
   544 assertEq(udiv_positive(null), -202);
   546 function shifted_udiv_positive(y) {
   547   var yu = y>>>1;
   548   if (yu <= 0) return -202;
   549   return yu / yu;
   550 }
   551 assertEq(shifted_udiv_positive(5), 1);
   552 assertEq(shifted_udiv_positive(2), 1);
   553 assertEq(shifted_udiv_positive(1), -202);
   554 assertEq(shifted_udiv_positive(-1), 1);
   555 assertEq(shifted_udiv_positive(0), -202);
   556 assertEq(shifted_udiv_positive(-0), -202);
   557 assertEq(shifted_udiv_positive(1.1), -202);
   558 assertEq(shifted_udiv_positive(-1.1), 1);
   559 assertEq(shifted_udiv_positive(Infinity), -202);
   560 assertEq(shifted_udiv_positive(NaN), -202);
   561 assertEq(shifted_udiv_positive(undefined), -202);
   562 assertEq(shifted_udiv_positive(null), -202);
   564 function smod_truncate_positive(y) {
   565   if (y <= 0) return -202;
   566   return (y % y)|0;
   567 }
   568 assertEq(smod_truncate_positive(5), 0);
   569 assertEq(smod_truncate_positive(1), 0);
   570 assertEq(smod_truncate_positive(-1), -202);
   571 assertEq(smod_truncate_positive(0), -202);
   572 assertEq(smod_truncate_positive(-0), -202);
   573 assertEq(smod_truncate_positive(1.1), 0);
   574 assertEq(smod_truncate_positive(-1.1), -202);
   575 assertEq(smod_truncate_positive(Infinity), 0);
   576 assertEq(smod_truncate_positive(NaN), 0);
   577 assertEq(smod_truncate_positive(undefined), 0);
   578 assertEq(smod_truncate_positive(null), -202);
   580 function smod_positive(y) {
   581   if (y <= 0) return -202;
   582   return y % y;
   583 }
   584 assertEq(smod_positive(5), 0);
   585 assertEq(smod_positive(1), 0);
   586 assertEq(smod_positive(-1), -202);
   587 assertEq(smod_positive(0), -202);
   588 assertEq(smod_positive(-0), -202);
   589 assertEq(smod_positive(1.1), 0);
   590 assertEq(smod_positive(-1.1), -202);
   591 assertEq(smod_positive(Infinity), NaN);
   592 assertEq(smod_positive(NaN), NaN);
   593 assertEq(smod_positive(undefined), NaN);
   594 assertEq(smod_positive(null), -202);
   596 function umod_truncate_positive(y) {
   597   var yu = y>>>0;
   598   if (yu <= 0) return -202;
   599   return (yu % yu)|0;
   600 }
   601 assertEq(umod_truncate_positive(5), 0);
   602 assertEq(umod_truncate_positive(1), 0);
   603 assertEq(umod_truncate_positive(-1), 0);
   604 assertEq(umod_truncate_positive(0), -202);
   605 assertEq(umod_truncate_positive(-0), -202);
   606 assertEq(umod_truncate_positive(1.1), 0);
   607 assertEq(umod_truncate_positive(-1.1), 0);
   608 assertEq(umod_truncate_positive(Infinity), -202);
   609 assertEq(umod_truncate_positive(NaN), -202);
   610 assertEq(umod_truncate_positive(undefined), -202);
   611 assertEq(umod_truncate_positive(null), -202);
   613 function shifted_umod_truncate_positive(y) {
   614   var yu = y>>>1;
   615   if (yu <= 0) return -202;
   616   return (yu % yu)|0;
   617 }
   618 assertEq(shifted_umod_truncate_positive(5), 0);
   619 assertEq(shifted_umod_truncate_positive(2), 0);
   620 assertEq(shifted_umod_truncate_positive(1), -202);
   621 assertEq(shifted_umod_truncate_positive(-1), 0);
   622 assertEq(shifted_umod_truncate_positive(0), -202);
   623 assertEq(shifted_umod_truncate_positive(-0), -202);
   624 assertEq(shifted_umod_truncate_positive(1.1), -202);
   625 assertEq(shifted_umod_truncate_positive(-1.1), 0);
   626 assertEq(shifted_umod_truncate_positive(Infinity), -202);
   627 assertEq(shifted_umod_truncate_positive(NaN), -202);
   628 assertEq(shifted_umod_truncate_positive(undefined), -202);
   629 assertEq(shifted_umod_truncate_positive(null), -202);
   631 function umod_positive(y) {
   632   var yu = y>>>0;
   633   if (yu <= 0) return -202;
   634   return yu % yu;
   635 }
   636 assertEq(umod_positive(5), 0);
   637 assertEq(umod_positive(1), 0);
   638 assertEq(umod_positive(-1), 0);
   639 assertEq(umod_positive(0), -202);
   640 assertEq(umod_positive(-0), -202);
   641 assertEq(umod_positive(1.1), 0);
   642 assertEq(umod_positive(-1.1), 0);
   643 assertEq(umod_positive(Infinity), -202);
   644 assertEq(umod_positive(NaN), -202);
   645 assertEq(umod_positive(undefined), -202);
   646 assertEq(umod_positive(null), -202);
   648 function shifted_umod_positive(y) {
   649   var yu = y>>>1;
   650   if (yu <= 0) return -202;
   651   return yu % yu;
   652 }
   653 assertEq(shifted_umod_positive(5), 0);
   654 assertEq(shifted_umod_positive(2), 0);
   655 assertEq(shifted_umod_positive(1), -202);
   656 assertEq(shifted_umod_positive(-1), 0);
   657 assertEq(shifted_umod_positive(0), -202);
   658 assertEq(shifted_umod_positive(-0), -202);
   659 assertEq(shifted_umod_positive(1.1), -202);
   660 assertEq(shifted_umod_positive(-1.1), 0);
   661 assertEq(shifted_umod_positive(Infinity), -202);
   662 assertEq(shifted_umod_positive(NaN), -202);
   663 assertEq(shifted_umod_positive(undefined), -202);
   664 assertEq(shifted_umod_positive(null), -202);

mercurial