tor-browser

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

bigint-mul-32.js (6622B)


      1 const tests = [
      2  [-0x10001n, -2n, 0x20002n],
      3  [-0x10000n, -2n, 0x20000n],
      4  [-0xffffn, -2n, 0x1fffen],
      5  [-0xfffen, -2n, 0x1fffcn],
      6  [-0x8001n, -2n, 0x10002n],
      7  [-0x8000n, -2n, 0x10000n],
      8  [-0x7fffn, -2n, 0xfffen],
      9  [-0x7ffen, -2n, 0xfffcn],
     10  [-2n, -2n, 4n],
     11  [-1n, -2n, 2n],
     12  [0n, -2n, 0n],
     13  [1n, -2n, -2n],
     14  [2n, -2n, -4n],
     15  [0x7ffen, -2n, -0xfffcn],
     16  [0x7fffn, -2n, -0xfffen],
     17  [0x8000n, -2n, -0x10000n],
     18  [0x8001n, -2n, -0x10002n],
     19  [0xfffen, -2n, -0x1fffcn],
     20  [0xffffn, -2n, -0x1fffen],
     21  [0x10000n, -2n, -0x20000n],
     22  [0x10001n, -2n, -0x20002n],
     23  [-0x7fffffffn, -1n, 0x7fffffffn],
     24  [-0x7ffffffen, -1n, 0x7ffffffen],
     25  [-0x10001n, -1n, 0x10001n],
     26  [-0x10000n, -1n, 0x10000n],
     27  [-0xffffn, -1n, 0xffffn],
     28  [-0xfffen, -1n, 0xfffen],
     29  [-0x8001n, -1n, 0x8001n],
     30  [-0x8000n, -1n, 0x8000n],
     31  [-0x7fffn, -1n, 0x7fffn],
     32  [-0x7ffen, -1n, 0x7ffen],
     33  [-1n, -1n, 1n],
     34  [0n, -1n, 0n],
     35  [1n, -1n, -1n],
     36  [2n, -1n, -2n],
     37  [0x7ffen, -1n, -0x7ffen],
     38  [0x7fffn, -1n, -0x7fffn],
     39  [0x8000n, -1n, -0x8000n],
     40  [0x8001n, -1n, -0x8001n],
     41  [0xfffen, -1n, -0xfffen],
     42  [0xffffn, -1n, -0xffffn],
     43  [0x10000n, -1n, -0x10000n],
     44  [0x10001n, -1n, -0x10001n],
     45  [0x7ffffffen, -1n, -0x7ffffffen],
     46  [0x7fffffffn, -1n, -0x7fffffffn],
     47  [-0x80000000n, 0n, 0n],
     48  [-0x7fffffffn, 0n, 0n],
     49  [-0x7ffffffen, 0n, 0n],
     50  [-0x10001n, 0n, 0n],
     51  [-0x10000n, 0n, 0n],
     52  [-0xffffn, 0n, 0n],
     53  [-0xfffen, 0n, 0n],
     54  [-0x8001n, 0n, 0n],
     55  [-0x8000n, 0n, 0n],
     56  [-0x7fffn, 0n, 0n],
     57  [-0x7ffen, 0n, 0n],
     58  [0n, 0n, 0n],
     59  [1n, 0n, 0n],
     60  [2n, 0n, 0n],
     61  [0x7ffen, 0n, 0n],
     62  [0x7fffn, 0n, 0n],
     63  [0x8000n, 0n, 0n],
     64  [0x8001n, 0n, 0n],
     65  [0xfffen, 0n, 0n],
     66  [0xffffn, 0n, 0n],
     67  [0x10000n, 0n, 0n],
     68  [0x10001n, 0n, 0n],
     69  [0x7ffffffen, 0n, 0n],
     70  [0x7fffffffn, 0n, 0n],
     71  [-0x80000000n, 1n, -0x80000000n],
     72  [-0x7fffffffn, 1n, -0x7fffffffn],
     73  [-0x7ffffffen, 1n, -0x7ffffffen],
     74  [-0x10001n, 1n, -0x10001n],
     75  [-0x10000n, 1n, -0x10000n],
     76  [-0xffffn, 1n, -0xffffn],
     77  [-0xfffen, 1n, -0xfffen],
     78  [-0x8001n, 1n, -0x8001n],
     79  [-0x8000n, 1n, -0x8000n],
     80  [-0x7fffn, 1n, -0x7fffn],
     81  [-0x7ffen, 1n, -0x7ffen],
     82  [1n, 1n, 1n],
     83  [2n, 1n, 2n],
     84  [0x7ffen, 1n, 0x7ffen],
     85  [0x7fffn, 1n, 0x7fffn],
     86  [0x8000n, 1n, 0x8000n],
     87  [0x8001n, 1n, 0x8001n],
     88  [0xfffen, 1n, 0xfffen],
     89  [0xffffn, 1n, 0xffffn],
     90  [0x10000n, 1n, 0x10000n],
     91  [0x10001n, 1n, 0x10001n],
     92  [0x7ffffffen, 1n, 0x7ffffffen],
     93  [0x7fffffffn, 1n, 0x7fffffffn],
     94  [-0x10001n, 2n, -0x20002n],
     95  [-0x10000n, 2n, -0x20000n],
     96  [-0xffffn, 2n, -0x1fffen],
     97  [-0xfffen, 2n, -0x1fffcn],
     98  [-0x8001n, 2n, -0x10002n],
     99  [-0x8000n, 2n, -0x10000n],
    100  [-0x7fffn, 2n, -0xfffen],
    101  [-0x7ffen, 2n, -0xfffcn],
    102  [2n, 2n, 4n],
    103  [0x7ffen, 2n, 0xfffcn],
    104  [0x7fffn, 2n, 0xfffen],
    105  [0x8000n, 2n, 0x10000n],
    106  [0x8001n, 2n, 0x10002n],
    107  [0xfffen, 2n, 0x1fffcn],
    108  [0xffffn, 2n, 0x1fffen],
    109  [0x10000n, 2n, 0x20000n],
    110  [0x10001n, 2n, 0x20002n],
    111  [-0x10001n, 0x7ffen, -0x7ffe7ffen],
    112  [-0x10000n, 0x7ffen, -0x7ffe0000n],
    113  [-0xffffn, 0x7ffen, -0x7ffd8002n],
    114  [-0xfffen, 0x7ffen, -0x7ffd0004n],
    115  [-0x8001n, 0x7ffen, -0x3fff7ffen],
    116  [-0x8000n, 0x7ffen, -0x3fff0000n],
    117  [-0x7fffn, 0x7ffen, -0x3ffe8002n],
    118  [-0x7ffen, 0x7ffen, -0x3ffe0004n],
    119  [0x7ffen, 0x7ffen, 0x3ffe0004n],
    120  [0x7fffn, 0x7ffen, 0x3ffe8002n],
    121  [0x8000n, 0x7ffen, 0x3fff0000n],
    122  [0x8001n, 0x7ffen, 0x3fff7ffen],
    123  [0xfffen, 0x7ffen, 0x7ffd0004n],
    124  [0xffffn, 0x7ffen, 0x7ffd8002n],
    125  [0x10000n, 0x7ffen, 0x7ffe0000n],
    126  [0x10001n, 0x7ffen, 0x7ffe7ffen],
    127  [-0x10001n, 0x7fffn, -0x7fff7fffn],
    128  [-0x10000n, 0x7fffn, -0x7fff0000n],
    129  [-0xffffn, 0x7fffn, -0x7ffe8001n],
    130  [-0xfffen, 0x7fffn, -0x7ffe0002n],
    131  [-0x8001n, 0x7fffn, -0x3fffffffn],
    132  [-0x8000n, 0x7fffn, -0x3fff8000n],
    133  [-0x7fffn, 0x7fffn, -0x3fff0001n],
    134  [-0x7ffen, 0x7fffn, -0x3ffe8002n],
    135  [0x7fffn, 0x7fffn, 0x3fff0001n],
    136  [0x8000n, 0x7fffn, 0x3fff8000n],
    137  [0x8001n, 0x7fffn, 0x3fffffffn],
    138  [0xfffen, 0x7fffn, 0x7ffe0002n],
    139  [0xffffn, 0x7fffn, 0x7ffe8001n],
    140  [0x10000n, 0x7fffn, 0x7fff0000n],
    141  [0x10001n, 0x7fffn, 0x7fff7fffn],
    142  [-0x10000n, 0x8000n, -0x80000000n],
    143  [-0xffffn, 0x8000n, -0x7fff8000n],
    144  [-0xfffen, 0x8000n, -0x7fff0000n],
    145  [-0x8001n, 0x8000n, -0x40008000n],
    146  [-0x8000n, 0x8000n, -0x40000000n],
    147  [-0x7fffn, 0x8000n, -0x3fff8000n],
    148  [-0x7ffen, 0x8000n, -0x3fff0000n],
    149  [0x8000n, 0x8000n, 0x40000000n],
    150  [0x8001n, 0x8000n, 0x40008000n],
    151  [0xfffen, 0x8000n, 0x7fff0000n],
    152  [0xffffn, 0x8000n, 0x7fff8000n],
    153  [-0xfffen, 0x8001n, -0x7ffffffen],
    154  [-0x8001n, 0x8001n, -0x40010001n],
    155  [-0x8000n, 0x8001n, -0x40008000n],
    156  [-0x7fffn, 0x8001n, -0x3fffffffn],
    157  [-0x7ffen, 0x8001n, -0x3fff7ffen],
    158  [0x8001n, 0x8001n, 0x40010001n],
    159  [0xfffen, 0x8001n, 0x7ffffffen],
    160  [-0xfffen, -0x8001n, 0x7ffffffen],
    161  [-0x8001n, -0x8001n, 0x40010001n],
    162  [-0x8000n, -0x8001n, 0x40008000n],
    163  [-0x7fffn, -0x8001n, 0x3fffffffn],
    164  [-0x7ffen, -0x8001n, 0x3fff7ffen],
    165  [0xfffen, -0x8001n, -0x7ffffffen],
    166  [-0xffffn, -0x8000n, 0x7fff8000n],
    167  [-0xfffen, -0x8000n, 0x7fff0000n],
    168  [-0x8000n, -0x8000n, 0x40000000n],
    169  [-0x7fffn, -0x8000n, 0x3fff8000n],
    170  [-0x7ffen, -0x8000n, 0x3fff0000n],
    171  [0xfffen, -0x8000n, -0x7fff0000n],
    172  [0xffffn, -0x8000n, -0x7fff8000n],
    173  [0x10000n, -0x8000n, -0x80000000n],
    174  [-0x10001n, -0x7fffn, 0x7fff7fffn],
    175  [-0x10000n, -0x7fffn, 0x7fff0000n],
    176  [-0xffffn, -0x7fffn, 0x7ffe8001n],
    177  [-0xfffen, -0x7fffn, 0x7ffe0002n],
    178  [-0x7fffn, -0x7fffn, 0x3fff0001n],
    179  [-0x7ffen, -0x7fffn, 0x3ffe8002n],
    180  [0xfffen, -0x7fffn, -0x7ffe0002n],
    181  [0xffffn, -0x7fffn, -0x7ffe8001n],
    182  [0x10000n, -0x7fffn, -0x7fff0000n],
    183  [0x10001n, -0x7fffn, -0x7fff7fffn],
    184  [-0x10001n, -0x7ffen, 0x7ffe7ffen],
    185  [-0x10000n, -0x7ffen, 0x7ffe0000n],
    186  [-0xffffn, -0x7ffen, 0x7ffd8002n],
    187  [-0xfffen, -0x7ffen, 0x7ffd0004n],
    188  [-0x7ffen, -0x7ffen, 0x3ffe0004n],
    189  [0xfffen, -0x7ffen, -0x7ffd0004n],
    190  [0xffffn, -0x7ffen, -0x7ffd8002n],
    191  [0x10000n, -0x7ffen, -0x7ffe0000n],
    192  [0x10001n, -0x7ffen, -0x7ffe7ffen],
    193 ];
    194 
    195 // Cases not covered above.
    196 tests.push(
    197  // Int32 overflow:
    198  //
    199  //   Math.floor(2 ** (Math.log2(2147483648) / 2))
    200  // = Math.floor(2 ** 15.5)
    201  // = 46340
    202  //
    203  //   Math.ceil(2 ** (Math.log2(2147483648) / 2))
    204  // = Math.ceil(2 ** 15.5)
    205  // = 46341
    206  [46340n, 46340n, 2147395600n],
    207  [46340n, -46340n, -2147395600n],
    208  [-46340n, -46340n, 2147395600n],
    209 );
    210 
    211 function f(tests) {
    212  for (let test of tests) {
    213    let lhs = test[0], rhs = test[1], expected = test[2];
    214    assertEq(BigInt.asIntN(32, lhs), lhs);
    215    assertEq(BigInt.asIntN(32, rhs), rhs);
    216    assertEq(BigInt.asIntN(32, expected), expected);
    217 
    218    assertEq(lhs * rhs, expected);
    219    assertEq(rhs * lhs, expected);
    220  }
    221 }
    222 
    223 for (let i = 0; i < 10; ++i) {
    224  f(tests);
    225 }