tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

mathImul.js (1672B)


      1 var table = [
      2    [NaN, 0, 0],
      3    [Infinity, Infinity, 0],
      4    [NaN, 1000, 0],
      5 
      6    [-1, -2, 2],
      7    [1, 2, 2],
      8    [-1, 2, -2],
      9    [1, -2, -2],
     10    [-0, 0, 0],
     11    [0, -0, 0],
     12    [-1, -0, 0],
     13    [1, -0, 0],
     14 
     15    [0xffffffff, 1, -1],
     16 
     17    [0xffffffff, 0xffffffff, 1],
     18    [0xffffffff, -0xffffffff, -1],
     19    [0xffffffff, 0xfffffffe, 2],
     20    [0xffffffff, -0xfffffffe, -2],
     21    [0x10000, 0x10000, 0],
     22 
     23    [{}, {}, 0],
     24    [[], [], 0],
     25    [{}, [], 0],
     26    [[], {}, 0],
     27 
     28    [{valueOf: function() { return -1; }}, 0x100000, -1048576],
     29    ["3", "-4", -12],
     30    [3.4, 6, 18]
     31 ];
     32 
     33 try {
     34    Math.imul({ valueOf: function() { throw "ha ha ha"; } });
     35    assertEq(true, false, "no error thrown");
     36 } catch (e) {
     37    assertEq(e, "ha ha ha");
     38 }
     39 
     40 var order = [];
     41 assertEq(Math.imul({ valueOf: function() { order.push("first"); return 0; } },
     42                   { valueOf: function() { order.push("second"); return 0; } }),
     43         0);
     44 assertEq(order[0], "first");
     45 assertEq(order[1], "second");
     46 
     47 var seen = [];
     48 try
     49 {
     50    Math.imul({ valueOf: function() { seen.push("one"); return 17; } },
     51              { valueOf: function() { throw "abort!"; } });
     52    assertEq(true, false, "no error thrown");
     53 }
     54 catch (e)
     55 {
     56  assertEq(e, "abort!", "should have thrown partway through, instead threw " + e);
     57 }
     58 assertEq(seen.length, 1);
     59 assertEq(seen[0], "one");
     60 
     61 assertEq(Math.imul(), 0);
     62 assertEq(Math.imul(100), 0);
     63 assertEq(Math.imul(NaN, 100), 0);
     64 assertEq(Math.imul(NaN, NaN), 0);
     65 assertEq(Math.imul(5, Infinity), 0);
     66 
     67 for (var i = 0; i < table.length; i++) {
     68    assertEq(Math.imul(table[i][0], table[i][1]), table[i][2]);
     69    assertEq(Math.imul(table[i][1], table[i][0]), table[i][2]);
     70 }