tor-browser

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

bigint-add-64-fold.js (13242B)


      1 const tests = [
      2  [-0x7ffffffffffffffen, -2n, -0x8000000000000000n],
      3  [-0x100000001n, -2n, -0x100000003n],
      4  [-0x100000000n, -2n, -0x100000002n],
      5  [-0xffffffffn, -2n, -0x100000001n],
      6  [-0xfffffffen, -2n, -0x100000000n],
      7  [-0x80000001n, -2n, -0x80000003n],
      8  [-0x80000000n, -2n, -0x80000002n],
      9  [-0x7fffffffn, -2n, -0x80000001n],
     10  [-0x7ffffffen, -2n, -0x80000000n],
     11  [-2n, -2n, -4n],
     12  [-1n, -2n, -3n],
     13  [0n, -2n, -2n],
     14  [1n, -2n, -1n],
     15  [2n, -2n, 0n],
     16  [0x7ffffffen, -2n, 0x7ffffffcn],
     17  [0x7fffffffn, -2n, 0x7ffffffdn],
     18  [0x80000000n, -2n, 0x7ffffffen],
     19  [0x80000001n, -2n, 0x7fffffffn],
     20  [0xfffffffen, -2n, 0xfffffffcn],
     21  [0xffffffffn, -2n, 0xfffffffdn],
     22  [0x100000000n, -2n, 0xfffffffen],
     23  [0x100000001n, -2n, 0xffffffffn],
     24  [0x7ffffffffffffffen, -2n, 0x7ffffffffffffffcn],
     25  [0x7fffffffffffffffn, -2n, 0x7ffffffffffffffdn],
     26  [-0x7fffffffffffffffn, -1n, -0x8000000000000000n],
     27  [-0x7ffffffffffffffen, -1n, -0x7fffffffffffffffn],
     28  [-0x100000001n, -1n, -0x100000002n],
     29  [-0x100000000n, -1n, -0x100000001n],
     30  [-0xffffffffn, -1n, -0x100000000n],
     31  [-0xfffffffen, -1n, -0xffffffffn],
     32  [-0x80000001n, -1n, -0x80000002n],
     33  [-0x80000000n, -1n, -0x80000001n],
     34  [-0x7fffffffn, -1n, -0x80000000n],
     35  [-0x7ffffffen, -1n, -0x7fffffffn],
     36  [-1n, -1n, -2n],
     37  [0n, -1n, -1n],
     38  [1n, -1n, 0n],
     39  [2n, -1n, 1n],
     40  [0x7ffffffen, -1n, 0x7ffffffdn],
     41  [0x7fffffffn, -1n, 0x7ffffffen],
     42  [0x80000000n, -1n, 0x7fffffffn],
     43  [0x80000001n, -1n, 0x80000000n],
     44  [0xfffffffen, -1n, 0xfffffffdn],
     45  [0xffffffffn, -1n, 0xfffffffen],
     46  [0x100000000n, -1n, 0xffffffffn],
     47  [0x100000001n, -1n, 0x100000000n],
     48  [0x7ffffffffffffffen, -1n, 0x7ffffffffffffffdn],
     49  [0x7fffffffffffffffn, -1n, 0x7ffffffffffffffen],
     50  [-0x8000000000000000n, 0n, -0x8000000000000000n],
     51  [-0x7fffffffffffffffn, 0n, -0x7fffffffffffffffn],
     52  [-0x7ffffffffffffffen, 0n, -0x7ffffffffffffffen],
     53  [-0x100000001n, 0n, -0x100000001n],
     54  [-0x100000000n, 0n, -0x100000000n],
     55  [-0xffffffffn, 0n, -0xffffffffn],
     56  [-0xfffffffen, 0n, -0xfffffffen],
     57  [-0x80000001n, 0n, -0x80000001n],
     58  [-0x80000000n, 0n, -0x80000000n],
     59  [-0x7fffffffn, 0n, -0x7fffffffn],
     60  [-0x7ffffffen, 0n, -0x7ffffffen],
     61  [0n, 0n, 0n],
     62  [1n, 0n, 1n],
     63  [2n, 0n, 2n],
     64  [0x7ffffffen, 0n, 0x7ffffffen],
     65  [0x7fffffffn, 0n, 0x7fffffffn],
     66  [0x80000000n, 0n, 0x80000000n],
     67  [0x80000001n, 0n, 0x80000001n],
     68  [0xfffffffen, 0n, 0xfffffffen],
     69  [0xffffffffn, 0n, 0xffffffffn],
     70  [0x100000000n, 0n, 0x100000000n],
     71  [0x100000001n, 0n, 0x100000001n],
     72  [0x7ffffffffffffffen, 0n, 0x7ffffffffffffffen],
     73  [0x7fffffffffffffffn, 0n, 0x7fffffffffffffffn],
     74  [-0x8000000000000000n, 1n, -0x7fffffffffffffffn],
     75  [-0x7fffffffffffffffn, 1n, -0x7ffffffffffffffen],
     76  [-0x7ffffffffffffffen, 1n, -0x7ffffffffffffffdn],
     77  [-0x100000001n, 1n, -0x100000000n],
     78  [-0x100000000n, 1n, -0xffffffffn],
     79  [-0xffffffffn, 1n, -0xfffffffen],
     80  [-0xfffffffen, 1n, -0xfffffffdn],
     81  [-0x80000001n, 1n, -0x80000000n],
     82  [-0x80000000n, 1n, -0x7fffffffn],
     83  [-0x7fffffffn, 1n, -0x7ffffffen],
     84  [-0x7ffffffen, 1n, -0x7ffffffdn],
     85  [1n, 1n, 2n],
     86  [2n, 1n, 3n],
     87  [0x7ffffffen, 1n, 0x7fffffffn],
     88  [0x7fffffffn, 1n, 0x80000000n],
     89  [0x80000000n, 1n, 0x80000001n],
     90  [0x80000001n, 1n, 0x80000002n],
     91  [0xfffffffen, 1n, 0xffffffffn],
     92  [0xffffffffn, 1n, 0x100000000n],
     93  [0x100000000n, 1n, 0x100000001n],
     94  [0x100000001n, 1n, 0x100000002n],
     95  [0x7ffffffffffffffen, 1n, 0x7fffffffffffffffn],
     96  [-0x8000000000000000n, 2n, -0x7ffffffffffffffen],
     97  [-0x7fffffffffffffffn, 2n, -0x7ffffffffffffffdn],
     98  [-0x7ffffffffffffffen, 2n, -0x7ffffffffffffffcn],
     99  [-0x100000001n, 2n, -0xffffffffn],
    100  [-0x100000000n, 2n, -0xfffffffen],
    101  [-0xffffffffn, 2n, -0xfffffffdn],
    102  [-0xfffffffen, 2n, -0xfffffffcn],
    103  [-0x80000001n, 2n, -0x7fffffffn],
    104  [-0x80000000n, 2n, -0x7ffffffen],
    105  [-0x7fffffffn, 2n, -0x7ffffffdn],
    106  [-0x7ffffffen, 2n, -0x7ffffffcn],
    107  [2n, 2n, 4n],
    108  [0x7ffffffen, 2n, 0x80000000n],
    109  [0x7fffffffn, 2n, 0x80000001n],
    110  [0x80000000n, 2n, 0x80000002n],
    111  [0x80000001n, 2n, 0x80000003n],
    112  [0xfffffffen, 2n, 0x100000000n],
    113  [0xffffffffn, 2n, 0x100000001n],
    114  [0x100000000n, 2n, 0x100000002n],
    115  [0x100000001n, 2n, 0x100000003n],
    116  [-0x8000000000000000n, 0x7ffffffen, -0x7fffffff80000002n],
    117  [-0x7fffffffffffffffn, 0x7ffffffen, -0x7fffffff80000001n],
    118  [-0x7ffffffffffffffen, 0x7ffffffen, -0x7fffffff80000000n],
    119  [-0x100000001n, 0x7ffffffen, -0x80000003n],
    120  [-0x100000000n, 0x7ffffffen, -0x80000002n],
    121  [-0xffffffffn, 0x7ffffffen, -0x80000001n],
    122  [-0xfffffffen, 0x7ffffffen, -0x80000000n],
    123  [-0x80000001n, 0x7ffffffen, -3n],
    124  [-0x80000000n, 0x7ffffffen, -2n],
    125  [-0x7fffffffn, 0x7ffffffen, -1n],
    126  [-0x7ffffffen, 0x7ffffffen, 0n],
    127  [0x7ffffffen, 0x7ffffffen, 0xfffffffcn],
    128  [0x7fffffffn, 0x7ffffffen, 0xfffffffdn],
    129  [0x80000000n, 0x7ffffffen, 0xfffffffen],
    130  [0x80000001n, 0x7ffffffen, 0xffffffffn],
    131  [0xfffffffen, 0x7ffffffen, 0x17ffffffcn],
    132  [0xffffffffn, 0x7ffffffen, 0x17ffffffdn],
    133  [0x100000000n, 0x7ffffffen, 0x17ffffffen],
    134  [0x100000001n, 0x7ffffffen, 0x17fffffffn],
    135  [-0x8000000000000000n, 0x7fffffffn, -0x7fffffff80000001n],
    136  [-0x7fffffffffffffffn, 0x7fffffffn, -0x7fffffff80000000n],
    137  [-0x7ffffffffffffffen, 0x7fffffffn, -0x7fffffff7fffffffn],
    138  [-0x100000001n, 0x7fffffffn, -0x80000002n],
    139  [-0x100000000n, 0x7fffffffn, -0x80000001n],
    140  [-0xffffffffn, 0x7fffffffn, -0x80000000n],
    141  [-0xfffffffen, 0x7fffffffn, -0x7fffffffn],
    142  [-0x80000001n, 0x7fffffffn, -2n],
    143  [-0x80000000n, 0x7fffffffn, -1n],
    144  [-0x7fffffffn, 0x7fffffffn, 0n],
    145  [-0x7ffffffen, 0x7fffffffn, 1n],
    146  [0x7fffffffn, 0x7fffffffn, 0xfffffffen],
    147  [0x80000000n, 0x7fffffffn, 0xffffffffn],
    148  [0x80000001n, 0x7fffffffn, 0x100000000n],
    149  [0xfffffffen, 0x7fffffffn, 0x17ffffffdn],
    150  [0xffffffffn, 0x7fffffffn, 0x17ffffffen],
    151  [0x100000000n, 0x7fffffffn, 0x17fffffffn],
    152  [0x100000001n, 0x7fffffffn, 0x180000000n],
    153  [-0x8000000000000000n, 0x80000000n, -0x7fffffff80000000n],
    154  [-0x7fffffffffffffffn, 0x80000000n, -0x7fffffff7fffffffn],
    155  [-0x7ffffffffffffffen, 0x80000000n, -0x7fffffff7ffffffen],
    156  [-0x100000001n, 0x80000000n, -0x80000001n],
    157  [-0x100000000n, 0x80000000n, -0x80000000n],
    158  [-0xffffffffn, 0x80000000n, -0x7fffffffn],
    159  [-0xfffffffen, 0x80000000n, -0x7ffffffen],
    160  [-0x80000001n, 0x80000000n, -1n],
    161  [-0x80000000n, 0x80000000n, 0n],
    162  [-0x7fffffffn, 0x80000000n, 1n],
    163  [-0x7ffffffen, 0x80000000n, 2n],
    164  [0x80000000n, 0x80000000n, 0x100000000n],
    165  [0x80000001n, 0x80000000n, 0x100000001n],
    166  [0xfffffffen, 0x80000000n, 0x17ffffffen],
    167  [0xffffffffn, 0x80000000n, 0x17fffffffn],
    168  [0x100000000n, 0x80000000n, 0x180000000n],
    169  [0x100000001n, 0x80000000n, 0x180000001n],
    170  [-0x8000000000000000n, 0x80000001n, -0x7fffffff7fffffffn],
    171  [-0x7fffffffffffffffn, 0x80000001n, -0x7fffffff7ffffffen],
    172  [-0x7ffffffffffffffen, 0x80000001n, -0x7fffffff7ffffffdn],
    173  [-0x100000001n, 0x80000001n, -0x80000000n],
    174  [-0x100000000n, 0x80000001n, -0x7fffffffn],
    175  [-0xffffffffn, 0x80000001n, -0x7ffffffen],
    176  [-0xfffffffen, 0x80000001n, -0x7ffffffdn],
    177  [-0x80000001n, 0x80000001n, 0n],
    178  [-0x80000000n, 0x80000001n, 1n],
    179  [-0x7fffffffn, 0x80000001n, 2n],
    180  [-0x7ffffffen, 0x80000001n, 3n],
    181  [0x80000001n, 0x80000001n, 0x100000002n],
    182  [0xfffffffen, 0x80000001n, 0x17fffffffn],
    183  [0xffffffffn, 0x80000001n, 0x180000000n],
    184  [0x100000000n, 0x80000001n, 0x180000001n],
    185  [0x100000001n, 0x80000001n, 0x180000002n],
    186  [-0x100000001n, -0x80000001n, -0x180000002n],
    187  [-0x100000000n, -0x80000001n, -0x180000001n],
    188  [-0xffffffffn, -0x80000001n, -0x180000000n],
    189  [-0xfffffffen, -0x80000001n, -0x17fffffffn],
    190  [-0x80000001n, -0x80000001n, -0x100000002n],
    191  [-0x80000000n, -0x80000001n, -0x100000001n],
    192  [-0x7fffffffn, -0x80000001n, -0x100000000n],
    193  [-0x7ffffffen, -0x80000001n, -0xffffffffn],
    194  [0xfffffffen, -0x80000001n, 0x7ffffffdn],
    195  [0xffffffffn, -0x80000001n, 0x7ffffffen],
    196  [0x100000000n, -0x80000001n, 0x7fffffffn],
    197  [0x100000001n, -0x80000001n, 0x80000000n],
    198  [0x7ffffffffffffffen, -0x80000001n, 0x7fffffff7ffffffdn],
    199  [0x7fffffffffffffffn, -0x80000001n, 0x7fffffff7ffffffen],
    200  [-0x100000001n, -0x80000000n, -0x180000001n],
    201  [-0x100000000n, -0x80000000n, -0x180000000n],
    202  [-0xffffffffn, -0x80000000n, -0x17fffffffn],
    203  [-0xfffffffen, -0x80000000n, -0x17ffffffen],
    204  [-0x80000000n, -0x80000000n, -0x100000000n],
    205  [-0x7fffffffn, -0x80000000n, -0xffffffffn],
    206  [-0x7ffffffen, -0x80000000n, -0xfffffffen],
    207  [0xfffffffen, -0x80000000n, 0x7ffffffen],
    208  [0xffffffffn, -0x80000000n, 0x7fffffffn],
    209  [0x100000000n, -0x80000000n, 0x80000000n],
    210  [0x100000001n, -0x80000000n, 0x80000001n],
    211  [0x7ffffffffffffffen, -0x80000000n, 0x7fffffff7ffffffen],
    212  [0x7fffffffffffffffn, -0x80000000n, 0x7fffffff7fffffffn],
    213  [-0x100000001n, -0x7fffffffn, -0x180000000n],
    214  [-0x100000000n, -0x7fffffffn, -0x17fffffffn],
    215  [-0xffffffffn, -0x7fffffffn, -0x17ffffffen],
    216  [-0xfffffffen, -0x7fffffffn, -0x17ffffffdn],
    217  [-0x7fffffffn, -0x7fffffffn, -0xfffffffen],
    218  [-0x7ffffffen, -0x7fffffffn, -0xfffffffdn],
    219  [0xfffffffen, -0x7fffffffn, 0x7fffffffn],
    220  [0xffffffffn, -0x7fffffffn, 0x80000000n],
    221  [0x100000000n, -0x7fffffffn, 0x80000001n],
    222  [0x100000001n, -0x7fffffffn, 0x80000002n],
    223  [0x7ffffffffffffffen, -0x7fffffffn, 0x7fffffff7fffffffn],
    224  [0x7fffffffffffffffn, -0x7fffffffn, 0x7fffffff80000000n],
    225  [-0x100000001n, -0x7ffffffen, -0x17fffffffn],
    226  [-0x100000000n, -0x7ffffffen, -0x17ffffffen],
    227  [-0xffffffffn, -0x7ffffffen, -0x17ffffffdn],
    228  [-0xfffffffen, -0x7ffffffen, -0x17ffffffcn],
    229  [-0x7ffffffen, -0x7ffffffen, -0xfffffffcn],
    230  [0xfffffffen, -0x7ffffffen, 0x80000000n],
    231  [0xffffffffn, -0x7ffffffen, 0x80000001n],
    232  [0x100000000n, -0x7ffffffen, 0x80000002n],
    233  [0x100000001n, -0x7ffffffen, 0x80000003n],
    234  [0x7ffffffffffffffen, -0x7ffffffen, 0x7fffffff80000000n],
    235  [0x7fffffffffffffffn, -0x7ffffffen, 0x7fffffff80000001n],
    236  [-0x8000000000000000n, 0xfffffffen, -0x7fffffff00000002n],
    237  [-0x7fffffffffffffffn, 0xfffffffen, -0x7fffffff00000001n],
    238  [-0x7ffffffffffffffen, 0xfffffffen, -0x7fffffff00000000n],
    239  [-0x100000001n, 0xfffffffen, -3n],
    240  [-0x100000000n, 0xfffffffen, -2n],
    241  [-0xffffffffn, 0xfffffffen, -1n],
    242  [-0xfffffffen, 0xfffffffen, 0n],
    243  [0xfffffffen, 0xfffffffen, 0x1fffffffcn],
    244  [0xffffffffn, 0xfffffffen, 0x1fffffffdn],
    245  [0x100000000n, 0xfffffffen, 0x1fffffffen],
    246  [0x100000001n, 0xfffffffen, 0x1ffffffffn],
    247  [-0x8000000000000000n, 0xffffffffn, -0x7fffffff00000001n],
    248  [-0x7fffffffffffffffn, 0xffffffffn, -0x7fffffff00000000n],
    249  [-0x7ffffffffffffffen, 0xffffffffn, -0x7ffffffeffffffffn],
    250  [-0x100000001n, 0xffffffffn, -2n],
    251  [-0x100000000n, 0xffffffffn, -1n],
    252  [-0xffffffffn, 0xffffffffn, 0n],
    253  [-0xfffffffen, 0xffffffffn, 1n],
    254  [0xffffffffn, 0xffffffffn, 0x1fffffffen],
    255  [0x100000000n, 0xffffffffn, 0x1ffffffffn],
    256  [0x100000001n, 0xffffffffn, 0x200000000n],
    257  [-0x8000000000000000n, 0x100000000n, -0x7fffffff00000000n],
    258  [-0x7fffffffffffffffn, 0x100000000n, -0x7ffffffeffffffffn],
    259  [-0x7ffffffffffffffen, 0x100000000n, -0x7ffffffefffffffen],
    260  [-0x100000001n, 0x100000000n, -1n],
    261  [-0x100000000n, 0x100000000n, 0n],
    262  [-0xffffffffn, 0x100000000n, 1n],
    263  [-0xfffffffen, 0x100000000n, 2n],
    264  [0x100000000n, 0x100000000n, 0x200000000n],
    265  [0x100000001n, 0x100000000n, 0x200000001n],
    266  [-0x8000000000000000n, 0x100000001n, -0x7ffffffeffffffffn],
    267  [-0x7fffffffffffffffn, 0x100000001n, -0x7ffffffefffffffen],
    268  [-0x7ffffffffffffffen, 0x100000001n, -0x7ffffffefffffffdn],
    269  [-0x100000001n, 0x100000001n, 0n],
    270  [-0x100000000n, 0x100000001n, 1n],
    271  [-0xffffffffn, 0x100000001n, 2n],
    272  [-0xfffffffen, 0x100000001n, 3n],
    273  [0x100000001n, 0x100000001n, 0x200000002n],
    274  [-0x100000001n, -0x100000001n, -0x200000002n],
    275  [-0x100000000n, -0x100000001n, -0x200000001n],
    276  [-0xffffffffn, -0x100000001n, -0x200000000n],
    277  [-0xfffffffen, -0x100000001n, -0x1ffffffffn],
    278  [0x7ffffffffffffffen, -0x100000001n, 0x7ffffffefffffffdn],
    279  [0x7fffffffffffffffn, -0x100000001n, 0x7ffffffefffffffen],
    280  [-0x100000000n, -0x100000000n, -0x200000000n],
    281  [-0xffffffffn, -0x100000000n, -0x1ffffffffn],
    282  [-0xfffffffen, -0x100000000n, -0x1fffffffen],
    283  [0x7ffffffffffffffen, -0x100000000n, 0x7ffffffefffffffen],
    284  [0x7fffffffffffffffn, -0x100000000n, 0x7ffffffeffffffffn],
    285  [-0xffffffffn, -0xffffffffn, -0x1fffffffen],
    286  [-0xfffffffen, -0xffffffffn, -0x1fffffffdn],
    287  [0x7ffffffffffffffen, -0xffffffffn, 0x7ffffffeffffffffn],
    288  [0x7fffffffffffffffn, -0xffffffffn, 0x7fffffff00000000n],
    289  [-0xfffffffen, -0xfffffffen, -0x1fffffffcn],
    290  [0x7ffffffffffffffen, -0xfffffffen, 0x7fffffff00000000n],
    291  [0x7fffffffffffffffn, -0xfffffffen, 0x7fffffff00000001n],
    292  [-0x8000000000000000n, 0x7ffffffffffffffen, -2n],
    293  [-0x7fffffffffffffffn, 0x7ffffffffffffffen, -1n],
    294  [-0x7ffffffffffffffen, 0x7ffffffffffffffen, 0n],
    295  [-0x8000000000000000n, 0x7fffffffffffffffn, -1n],
    296  [-0x7fffffffffffffffn, 0x7fffffffffffffffn, 0n],
    297  [-0x7ffffffffffffffen, 0x7fffffffffffffffn, 1n],
    298 ];
    299 
    300 function f(tests) {
    301  for (let test of tests) {
    302    let lhs = test[0], rhs = test[1], expected = test[2];
    303    assertEq(BigInt.asIntN(64, lhs), lhs);
    304    assertEq(BigInt.asIntN(64, rhs), rhs);
    305    assertEq(BigInt.asIntN(64, expected), expected);
    306 
    307    let f = Function(`
    308      let lhs = ${lhs}n;
    309      let rhs = ${rhs}n;
    310      assertEq(lhs + rhs, ${expected}n);
    311      assertEq(rhs + lhs, ${expected}n);
    312    `);
    313 
    314    for (let j = 0; j < 100; ++j) {
    315      f();
    316    }
    317  }
    318 }
    319 
    320 f(tests);