tor-browser

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

bigint-pow-64.js (5260B)


      1 const tests = [
      2  [-0x8000000000000000n, 0n, 1n],
      3  [-0x7fffffffffffffffn, 0n, 1n],
      4  [-0x7ffffffffffffffen, 0n, 1n],
      5  [-0x100000001n, 0n, 1n],
      6  [-0x100000000n, 0n, 1n],
      7  [-0xffffffffn, 0n, 1n],
      8  [-0xfffffffen, 0n, 1n],
      9  [-0x80000001n, 0n, 1n],
     10  [-0x80000000n, 0n, 1n],
     11  [-0x7fffffffn, 0n, 1n],
     12  [-0x7ffffffen, 0n, 1n],
     13  [-9n, 0n, 1n],
     14  [-8n, 0n, 1n],
     15  [-7n, 0n, 1n],
     16  [-6n, 0n, 1n],
     17  [-5n, 0n, 1n],
     18  [-4n, 0n, 1n],
     19  [-3n, 0n, 1n],
     20  [-2n, 0n, 1n],
     21  [-1n, 0n, 1n],
     22  [0n, 0n, 1n],
     23  [1n, 0n, 1n],
     24  [2n, 0n, 1n],
     25  [3n, 0n, 1n],
     26  [4n, 0n, 1n],
     27  [5n, 0n, 1n],
     28  [6n, 0n, 1n],
     29  [7n, 0n, 1n],
     30  [8n, 0n, 1n],
     31  [9n, 0n, 1n],
     32  [0x7ffffffen, 0n, 1n],
     33  [0x7fffffffn, 0n, 1n],
     34  [0x80000000n, 0n, 1n],
     35  [0x80000001n, 0n, 1n],
     36  [0xfffffffen, 0n, 1n],
     37  [0xffffffffn, 0n, 1n],
     38  [0x100000000n, 0n, 1n],
     39  [0x100000001n, 0n, 1n],
     40  [0x7ffffffffffffffen, 0n, 1n],
     41  [0x7fffffffffffffffn, 0n, 1n],
     42  [-0x8000000000000000n, 1n, -0x8000000000000000n],
     43  [-0x7fffffffffffffffn, 1n, -0x7fffffffffffffffn],
     44  [-0x7ffffffffffffffen, 1n, -0x7ffffffffffffffen],
     45  [-0x100000001n, 1n, -0x100000001n],
     46  [-0x100000000n, 1n, -0x100000000n],
     47  [-0xffffffffn, 1n, -0xffffffffn],
     48  [-0xfffffffen, 1n, -0xfffffffen],
     49  [-0x80000001n, 1n, -0x80000001n],
     50  [-0x80000000n, 1n, -0x80000000n],
     51  [-0x7fffffffn, 1n, -0x7fffffffn],
     52  [-0x7ffffffen, 1n, -0x7ffffffen],
     53  [-9n, 1n, -9n],
     54  [-8n, 1n, -8n],
     55  [-7n, 1n, -7n],
     56  [-6n, 1n, -6n],
     57  [-5n, 1n, -5n],
     58  [-4n, 1n, -4n],
     59  [-3n, 1n, -3n],
     60  [-2n, 1n, -2n],
     61  [-1n, 1n, -1n],
     62  [0n, 1n, 0n],
     63  [1n, 1n, 1n],
     64  [2n, 1n, 2n],
     65  [3n, 1n, 3n],
     66  [4n, 1n, 4n],
     67  [5n, 1n, 5n],
     68  [6n, 1n, 6n],
     69  [7n, 1n, 7n],
     70  [8n, 1n, 8n],
     71  [9n, 1n, 9n],
     72  [0x7ffffffen, 1n, 0x7ffffffen],
     73  [0x7fffffffn, 1n, 0x7fffffffn],
     74  [0x80000000n, 1n, 0x80000000n],
     75  [0x80000001n, 1n, 0x80000001n],
     76  [0xfffffffen, 1n, 0xfffffffen],
     77  [0xffffffffn, 1n, 0xffffffffn],
     78  [0x100000000n, 1n, 0x100000000n],
     79  [0x100000001n, 1n, 0x100000001n],
     80  [0x7ffffffffffffffen, 1n, 0x7ffffffffffffffen],
     81  [0x7fffffffffffffffn, 1n, 0x7fffffffffffffffn],
     82  [-0x80000001n, 2n, 0x4000000100000001n],
     83  [-0x80000000n, 2n, 0x4000000000000000n],
     84  [-0x7fffffffn, 2n, 0x3fffffff00000001n],
     85  [-0x7ffffffen, 2n, 0x3ffffffe00000004n],
     86  [-9n, 2n, 0x51n],
     87  [-8n, 2n, 0x40n],
     88  [-7n, 2n, 0x31n],
     89  [-6n, 2n, 0x24n],
     90  [-5n, 2n, 0x19n],
     91  [-4n, 2n, 0x10n],
     92  [-3n, 2n, 9n],
     93  [-2n, 2n, 4n],
     94  [-1n, 2n, 1n],
     95  [0n, 2n, 0n],
     96  [1n, 2n, 1n],
     97  [2n, 2n, 4n],
     98  [3n, 2n, 9n],
     99  [4n, 2n, 0x10n],
    100  [5n, 2n, 0x19n],
    101  [6n, 2n, 0x24n],
    102  [7n, 2n, 0x31n],
    103  [8n, 2n, 0x40n],
    104  [9n, 2n, 0x51n],
    105  [0x7ffffffen, 2n, 0x3ffffffe00000004n],
    106  [0x7fffffffn, 2n, 0x3fffffff00000001n],
    107  [0x80000000n, 2n, 0x4000000000000000n],
    108  [0x80000001n, 2n, 0x4000000100000001n],
    109  [-9n, 3n, -0x2d9n],
    110  [-8n, 3n, -0x200n],
    111  [-7n, 3n, -0x157n],
    112  [-6n, 3n, -0xd8n],
    113  [-5n, 3n, -0x7dn],
    114  [-4n, 3n, -0x40n],
    115  [-3n, 3n, -0x1bn],
    116  [-2n, 3n, -8n],
    117  [-1n, 3n, -1n],
    118  [0n, 3n, 0n],
    119  [1n, 3n, 1n],
    120  [2n, 3n, 8n],
    121  [3n, 3n, 0x1bn],
    122  [4n, 3n, 0x40n],
    123  [5n, 3n, 0x7dn],
    124  [6n, 3n, 0xd8n],
    125  [7n, 3n, 0x157n],
    126  [8n, 3n, 0x200n],
    127  [9n, 3n, 0x2d9n],
    128  [-9n, 4n, 0x19a1n],
    129  [-8n, 4n, 0x1000n],
    130  [-7n, 4n, 0x961n],
    131  [-6n, 4n, 0x510n],
    132  [-5n, 4n, 0x271n],
    133  [-4n, 4n, 0x100n],
    134  [-3n, 4n, 0x51n],
    135  [-2n, 4n, 0x10n],
    136  [-1n, 4n, 1n],
    137  [0n, 4n, 0n],
    138  [1n, 4n, 1n],
    139  [2n, 4n, 0x10n],
    140  [3n, 4n, 0x51n],
    141  [4n, 4n, 0x100n],
    142  [5n, 4n, 0x271n],
    143  [6n, 4n, 0x510n],
    144  [7n, 4n, 0x961n],
    145  [8n, 4n, 0x1000n],
    146  [9n, 4n, 0x19a1n],
    147  [-4n, 0x1fn, -0x4000000000000000n],
    148  [-3n, 0x1fn, -0x231c54b5f6a2bn],
    149  [-2n, 0x1fn, -0x80000000n],
    150  [-1n, 0x1fn, -1n],
    151  [0n, 0x1fn, 0n],
    152  [1n, 0x1fn, 1n],
    153  [2n, 0x1fn, 0x80000000n],
    154  [3n, 0x1fn, 0x231c54b5f6a2bn],
    155  [4n, 0x1fn, 0x4000000000000000n],
    156  [-3n, 0x20n, 0x6954fe21e3e81n],
    157  [-2n, 0x20n, 0x100000000n],
    158  [-1n, 0x20n, 1n],
    159  [0n, 0x20n, 0n],
    160  [1n, 0x20n, 1n],
    161  [2n, 0x20n, 0x100000000n],
    162  [3n, 0x20n, 0x6954fe21e3e81n],
    163  [-2n, 0x3fn, -0x8000000000000000n],
    164  [-1n, 0x3fn, -1n],
    165  [0n, 0x3fn, 0n],
    166  [1n, 0x3fn, 1n],
    167  [-1n, 0x40n, 1n],
    168  [0n, 0x40n, 0n],
    169  [1n, 0x40n, 1n],
    170 ];
    171 
    172 // Cases not covered above.
    173 tests.push(
    174  // 0 ** (2**31)
    175  // 0 ** (2**32)
    176  // 0 ** (2**63)
    177  // 0 ** (2**64)
    178  [0n, 0x7fffffffn, 0n],
    179  [0n, 0x80000000n, 0n],
    180  [0n, 0x80000001n, 0n],
    181  [0n, 0xffffffffn, 0n],
    182  [0n, 0x100000000n, 0n],
    183  [0n, 0x100000001n, 0n],
    184  [0n, 0x7fffffffffffffffn, 0n],
    185 
    186  // 1 ** (2**31)
    187  // 1 ** (2**32)
    188  // 1 ** (2**63)
    189  // 1 ** (2**64)
    190  [1n, 0x7fffffffn, 1n],
    191  [1n, 0x80000000n, 1n],
    192  [1n, 0x80000001n, 1n],
    193  [1n, 0xffffffffn, 1n],
    194  [1n, 0x100000000n, 1n],
    195  [1n, 0x100000001n, 1n],
    196  [1n, 0x7fffffffffffffffn, 1n],
    197 
    198  // -1 ** (2**31)
    199  // -1 ** (2**32)
    200  // -1 ** (2**63)
    201  // -1 ** (2**64)
    202  [-1n, 0x7fffffffn, -1n],
    203  [-1n, 0x80000000n, 1n],
    204  [-1n, 0x80000001n, -1n],
    205  [-1n, 0xffffffffn, -1n],
    206  [-1n, 0x100000000n, 1n],
    207  [-1n, 0x100000001n, -1n],
    208  [-1n, 0x7fffffffffffffffn, -1n],
    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(64, lhs), lhs);
    215    assertEq(BigInt.asIntN(64, rhs), rhs);
    216    assertEq(BigInt.asIntN(64, expected), expected);
    217 
    218    assertEq(lhs ** rhs, expected);
    219  }
    220 }
    221 
    222 for (let i = 0; i < 10; ++i) {
    223  f(tests);
    224 }