tor-browser

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

bigint-mod-32-fold.js (2945B)


      1 const tests = [
      2  [-0x80000000n, -2n, 0n],
      3  [-0x7fffffffn, -2n, -1n],
      4  [-0x7ffffffen, -2n, 0n],
      5  [-2n, -2n, 0n],
      6  [-1n, -2n, -1n],
      7  [0n, -2n, 0n],
      8  [1n, -2n, 1n],
      9  [2n, -2n, 0n],
     10  [0x7ffffffen, -2n, 0n],
     11  [0x7fffffffn, -2n, 1n],
     12  [-0x80000000n, -1n, 0n],
     13  [-0x7fffffffn, -1n, 0n],
     14  [-0x7ffffffen, -1n, 0n],
     15  [-2n, -1n, 0n],
     16  [-1n, -1n, 0n],
     17  [0n, -1n, 0n],
     18  [1n, -1n, 0n],
     19  [2n, -1n, 0n],
     20  [0x7ffffffen, -1n, 0n],
     21  [0x7fffffffn, -1n, 0n],
     22  [-0x80000000n, 1n, 0n],
     23  [-0x7fffffffn, 1n, 0n],
     24  [-0x7ffffffen, 1n, 0n],
     25  [-2n, 1n, 0n],
     26  [-1n, 1n, 0n],
     27  [0n, 1n, 0n],
     28  [1n, 1n, 0n],
     29  [2n, 1n, 0n],
     30  [0x7ffffffen, 1n, 0n],
     31  [0x7fffffffn, 1n, 0n],
     32  [-0x80000000n, 2n, 0n],
     33  [-0x7fffffffn, 2n, -1n],
     34  [-0x7ffffffen, 2n, 0n],
     35  [-2n, 2n, 0n],
     36  [-1n, 2n, -1n],
     37  [0n, 2n, 0n],
     38  [1n, 2n, 1n],
     39  [2n, 2n, 0n],
     40  [0x7ffffffen, 2n, 0n],
     41  [0x7fffffffn, 2n, 1n],
     42  [-0x80000000n, 0x7ffffffen, -2n],
     43  [-0x7fffffffn, 0x7ffffffen, -1n],
     44  [-0x7ffffffen, 0x7ffffffen, 0n],
     45  [-2n, 0x7ffffffen, -2n],
     46  [-1n, 0x7ffffffen, -1n],
     47  [0n, 0x7ffffffen, 0n],
     48  [1n, 0x7ffffffen, 1n],
     49  [2n, 0x7ffffffen, 2n],
     50  [0x7ffffffen, 0x7ffffffen, 0n],
     51  [0x7fffffffn, 0x7ffffffen, 1n],
     52  [-0x80000000n, 0x7fffffffn, -1n],
     53  [-0x7fffffffn, 0x7fffffffn, 0n],
     54  [-0x7ffffffen, 0x7fffffffn, -0x7ffffffen],
     55  [-2n, 0x7fffffffn, -2n],
     56  [-1n, 0x7fffffffn, -1n],
     57  [0n, 0x7fffffffn, 0n],
     58  [1n, 0x7fffffffn, 1n],
     59  [2n, 0x7fffffffn, 2n],
     60  [0x7ffffffen, 0x7fffffffn, 0x7ffffffen],
     61  [0x7fffffffn, 0x7fffffffn, 0n],
     62  [-0x80000000n, -0x80000000n, 0n],
     63  [-0x7fffffffn, -0x80000000n, -0x7fffffffn],
     64  [-0x7ffffffen, -0x80000000n, -0x7ffffffen],
     65  [-2n, -0x80000000n, -2n],
     66  [-1n, -0x80000000n, -1n],
     67  [0n, -0x80000000n, 0n],
     68  [1n, -0x80000000n, 1n],
     69  [2n, -0x80000000n, 2n],
     70  [0x7ffffffen, -0x80000000n, 0x7ffffffen],
     71  [0x7fffffffn, -0x80000000n, 0x7fffffffn],
     72  [-0x80000000n, -0x7fffffffn, -1n],
     73  [-0x7fffffffn, -0x7fffffffn, 0n],
     74  [-0x7ffffffen, -0x7fffffffn, -0x7ffffffen],
     75  [-2n, -0x7fffffffn, -2n],
     76  [-1n, -0x7fffffffn, -1n],
     77  [0n, -0x7fffffffn, 0n],
     78  [1n, -0x7fffffffn, 1n],
     79  [2n, -0x7fffffffn, 2n],
     80  [0x7ffffffen, -0x7fffffffn, 0x7ffffffen],
     81  [0x7fffffffn, -0x7fffffffn, 0n],
     82  [-0x80000000n, -0x7ffffffen, -2n],
     83  [-0x7fffffffn, -0x7ffffffen, -1n],
     84  [-0x7ffffffen, -0x7ffffffen, 0n],
     85  [-2n, -0x7ffffffen, -2n],
     86  [-1n, -0x7ffffffen, -1n],
     87  [0n, -0x7ffffffen, 0n],
     88  [1n, -0x7ffffffen, 1n],
     89  [2n, -0x7ffffffen, 2n],
     90  [0x7ffffffen, -0x7ffffffen, 0n],
     91  [0x7fffffffn, -0x7ffffffen, 1n],
     92 ];
     93 
     94 function f(tests) {
     95  for (let test of tests) {
     96    let lhs = test[0], rhs = test[1], expected = test[2];
     97    assertEq(BigInt.asIntN(32, lhs), lhs);
     98    assertEq(BigInt.asIntN(32, rhs), rhs);
     99    assertEq(BigInt.asIntN(32, expected), expected);
    100 
    101    let f = Function(`
    102      let lhs = ${lhs}n;
    103      let rhs = ${rhs}n;
    104      assertEq(lhs % rhs, ${expected}n);
    105    `);
    106 
    107    for (let j = 0; j < 100; ++j) {
    108      f();
    109    }
    110  }
    111 }
    112 
    113 f(tests);