tor-browser

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

bigint-pow-32.js (2831B)


      1 const tests = [
      2  [-0x80000000n, 0n, 1n],
      3  [-0x7fffffffn, 0n, 1n],
      4  [-0x7ffffffen, 0n, 1n],
      5  [-9n, 0n, 1n],
      6  [-8n, 0n, 1n],
      7  [-7n, 0n, 1n],
      8  [-6n, 0n, 1n],
      9  [-5n, 0n, 1n],
     10  [-4n, 0n, 1n],
     11  [-3n, 0n, 1n],
     12  [-2n, 0n, 1n],
     13  [-1n, 0n, 1n],
     14  [0n, 0n, 1n],
     15  [1n, 0n, 1n],
     16  [2n, 0n, 1n],
     17  [3n, 0n, 1n],
     18  [4n, 0n, 1n],
     19  [5n, 0n, 1n],
     20  [6n, 0n, 1n],
     21  [7n, 0n, 1n],
     22  [8n, 0n, 1n],
     23  [9n, 0n, 1n],
     24  [0x7ffffffen, 0n, 1n],
     25  [0x7fffffffn, 0n, 1n],
     26  [-0x80000000n, 1n, -0x80000000n],
     27  [-0x7fffffffn, 1n, -0x7fffffffn],
     28  [-0x7ffffffen, 1n, -0x7ffffffen],
     29  [-9n, 1n, -9n],
     30  [-8n, 1n, -8n],
     31  [-7n, 1n, -7n],
     32  [-6n, 1n, -6n],
     33  [-5n, 1n, -5n],
     34  [-4n, 1n, -4n],
     35  [-3n, 1n, -3n],
     36  [-2n, 1n, -2n],
     37  [-1n, 1n, -1n],
     38  [0n, 1n, 0n],
     39  [1n, 1n, 1n],
     40  [2n, 1n, 2n],
     41  [3n, 1n, 3n],
     42  [4n, 1n, 4n],
     43  [5n, 1n, 5n],
     44  [6n, 1n, 6n],
     45  [7n, 1n, 7n],
     46  [8n, 1n, 8n],
     47  [9n, 1n, 9n],
     48  [0x7ffffffen, 1n, 0x7ffffffen],
     49  [0x7fffffffn, 1n, 0x7fffffffn],
     50  [-9n, 2n, 0x51n],
     51  [-8n, 2n, 0x40n],
     52  [-7n, 2n, 0x31n],
     53  [-6n, 2n, 0x24n],
     54  [-5n, 2n, 0x19n],
     55  [-4n, 2n, 0x10n],
     56  [-3n, 2n, 9n],
     57  [-2n, 2n, 4n],
     58  [-1n, 2n, 1n],
     59  [0n, 2n, 0n],
     60  [1n, 2n, 1n],
     61  [2n, 2n, 4n],
     62  [3n, 2n, 9n],
     63  [4n, 2n, 0x10n],
     64  [5n, 2n, 0x19n],
     65  [6n, 2n, 0x24n],
     66  [7n, 2n, 0x31n],
     67  [8n, 2n, 0x40n],
     68  [9n, 2n, 0x51n],
     69  [-9n, 3n, -0x2d9n],
     70  [-8n, 3n, -0x200n],
     71  [-7n, 3n, -0x157n],
     72  [-6n, 3n, -0xd8n],
     73  [-5n, 3n, -0x7dn],
     74  [-4n, 3n, -0x40n],
     75  [-3n, 3n, -0x1bn],
     76  [-2n, 3n, -8n],
     77  [-1n, 3n, -1n],
     78  [0n, 3n, 0n],
     79  [1n, 3n, 1n],
     80  [2n, 3n, 8n],
     81  [3n, 3n, 0x1bn],
     82  [4n, 3n, 0x40n],
     83  [5n, 3n, 0x7dn],
     84  [6n, 3n, 0xd8n],
     85  [7n, 3n, 0x157n],
     86  [8n, 3n, 0x200n],
     87  [9n, 3n, 0x2d9n],
     88  [-9n, 4n, 0x19a1n],
     89  [-8n, 4n, 0x1000n],
     90  [-7n, 4n, 0x961n],
     91  [-6n, 4n, 0x510n],
     92  [-5n, 4n, 0x271n],
     93  [-4n, 4n, 0x100n],
     94  [-3n, 4n, 0x51n],
     95  [-2n, 4n, 0x10n],
     96  [-1n, 4n, 1n],
     97  [0n, 4n, 0n],
     98  [1n, 4n, 1n],
     99  [2n, 4n, 0x10n],
    100  [3n, 4n, 0x51n],
    101  [4n, 4n, 0x100n],
    102  [5n, 4n, 0x271n],
    103  [6n, 4n, 0x510n],
    104  [7n, 4n, 0x961n],
    105  [8n, 4n, 0x1000n],
    106  [9n, 4n, 0x19a1n],
    107  [-2n, 0x1fn, -0x80000000n],
    108  [-1n, 0x1fn, -1n],
    109  [0n, 0x1fn, 0n],
    110  [1n, 0x1fn, 1n],
    111  [-1n, 0x20n, 1n],
    112  [0n, 0x20n, 0n],
    113  [1n, 0x20n, 1n],
    114  [-1n, 0x3fn, -1n],
    115  [0n, 0x3fn, 0n],
    116  [1n, 0x3fn, 1n],
    117  [-1n, 0x40n, 1n],
    118  [0n, 0x40n, 0n],
    119  [1n, 0x40n, 1n],
    120 ];
    121 
    122 // Cases not covered above.
    123 tests.push(
    124  // 0 ** (2**31)
    125  [0n, 0x7fffffffn, 0n],
    126 
    127  // 1 ** (2**31)
    128  [1n, 0x7fffffffn, 1n],
    129 
    130  // -1 ** (2**31)
    131  [-1n, 0x7fffffffn, -1n],
    132 );
    133 
    134 function f(tests) {
    135  for (let test of tests) {
    136    let lhs = test[0], rhs = test[1], expected = test[2];
    137    assertEq(BigInt.asIntN(32, lhs), lhs);
    138    assertEq(BigInt.asIntN(32, rhs), rhs);
    139    assertEq(BigInt.asIntN(32, expected), expected);
    140 
    141    assertEq(lhs ** rhs, expected);
    142  }
    143 }
    144 
    145 for (let i = 0; i < 10; ++i) {
    146  f(tests);
    147 }