tor-browser

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

bigint.js (7148B)


      1 // Copyright (C) 2017 Josh Wolfe. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 description: Right shift for BigInt values
      6 esid: sec-numeric-types-bigint-signedRightShift
      7 info: |
      8  BigInt::signedRightShift (x, y)
      9 
     10  The abstract operation BigInt::signedRightShift with arguments x and y of type BigInt:
     11 
     12  1. Return BigInt::leftShift(x, -y).
     13 
     14  sec-numeric-types-bigint-leftShift
     15  BigInt::leftShift (x, y)
     16 
     17  The abstract operation BigInt::leftShift with two arguments x and y of BigInt:
     18 
     19  1. If y < 0,
     20    a. Return a BigInt representing x divided by 2-y, rounding down to the nearest integer, including for negative numbers.
     21  2. Return a BigInt representing x multiplied by 2y.
     22 
     23  NOTE: Semantics here should be equivalent to a bitwise shift, treating the BigInt as an infinite length string of binary two's complement digits.
     24 
     25 features: [BigInt]
     26 ---*/
     27 
     28 assert.sameValue(0n >> 0n, 0n, "0n >> 0n === 0n");
     29 assert.sameValue(0b101n >> -1n, 0b1010n, "0b101n >> -1n === 0b1010n");
     30 assert.sameValue(0b101n >> -2n, 0b10100n, "0b101n >> -2n === 0b10100n");
     31 assert.sameValue(0b101n >> -3n, 0b101000n, "0b101n >> -3n === 0b101000n");
     32 assert.sameValue(0b101n >> 1n, 0b10n, "0b101n >> 1n === 0b10n");
     33 assert.sameValue(0b101n >> 2n, 1n, "0b101n >> 2n === 1n");
     34 assert.sameValue(0b101n >> 3n, 0n, "0b101n >> 3n === 0n");
     35 assert.sameValue(0n >> -128n, 0n, "0n >> -128n === 0n");
     36 assert.sameValue(0n >> 128n, 0n, "0n >> 128n === 0n");
     37 assert.sameValue(0x246n >> 0n, 0x246n, "0x246n >> 0n === 0x246n");
     38 assert.sameValue(0x246n >> -127n, 0x12300000000000000000000000000000000n, "0x246n >> -127n === 0x12300000000000000000000000000000000n");
     39 assert.sameValue(0x246n >> -128n, 0x24600000000000000000000000000000000n, "0x246n >> -128n === 0x24600000000000000000000000000000000n");
     40 assert.sameValue(0x246n >> -129n, 0x48c00000000000000000000000000000000n, "0x246n >> -129n === 0x48c00000000000000000000000000000000n");
     41 assert.sameValue(0x246n >> 128n, 0n, "0x246n >> 128n === 0n");
     42 assert.sameValue(
     43  0x123456789abcdef0fedcba9876543212345678n >> -64n, 0x123456789abcdef0fedcba98765432123456780000000000000000n,
     44  "0x123456789abcdef0fedcba9876543212345678n >> -64n === 0x123456789abcdef0fedcba98765432123456780000000000000000n");
     45 assert.sameValue(
     46  0x123456789abcdef0fedcba9876543212345678n >> -32n, 0x123456789abcdef0fedcba987654321234567800000000n,
     47  "0x123456789abcdef0fedcba9876543212345678n >> -32n === 0x123456789abcdef0fedcba987654321234567800000000n");
     48 assert.sameValue(
     49  0x123456789abcdef0fedcba9876543212345678n >> -16n, 0x123456789abcdef0fedcba98765432123456780000n,
     50  "0x123456789abcdef0fedcba9876543212345678n >> -16n === 0x123456789abcdef0fedcba98765432123456780000n");
     51 assert.sameValue(
     52  0x123456789abcdef0fedcba9876543212345678n >> 0n, 0x123456789abcdef0fedcba9876543212345678n,
     53  "0x123456789abcdef0fedcba9876543212345678n >> 0n === 0x123456789abcdef0fedcba9876543212345678n");
     54 assert.sameValue(
     55  0x123456789abcdef0fedcba9876543212345678n >> 16n, 0x123456789abcdef0fedcba987654321234n,
     56  "0x123456789abcdef0fedcba9876543212345678n >> 16n === 0x123456789abcdef0fedcba987654321234n");
     57 assert.sameValue(
     58  0x123456789abcdef0fedcba9876543212345678n >> 32n, 0x123456789abcdef0fedcba98765432n,
     59  "0x123456789abcdef0fedcba9876543212345678n >> 32n === 0x123456789abcdef0fedcba98765432n");
     60 assert.sameValue(
     61  0x123456789abcdef0fedcba9876543212345678n >> 64n, 0x123456789abcdef0fedcban,
     62  "0x123456789abcdef0fedcba9876543212345678n >> 64n === 0x123456789abcdef0fedcban");
     63 assert.sameValue(
     64  0x123456789abcdef0fedcba9876543212345678n >> 127n, 0x2468acn,
     65  "0x123456789abcdef0fedcba9876543212345678n >> 127n === 0x2468acn");
     66 assert.sameValue(
     67  0x123456789abcdef0fedcba9876543212345678n >> 128n, 0x123456n,
     68  "0x123456789abcdef0fedcba9876543212345678n >> 128n === 0x123456n");
     69 assert.sameValue(
     70  0x123456789abcdef0fedcba9876543212345678n >> 129n, 0x91a2bn,
     71  "0x123456789abcdef0fedcba9876543212345678n >> 129n === 0x91a2bn");
     72 assert.sameValue(-5n >> -1n, -0xan, "-5n >> -1n === -0xan");
     73 assert.sameValue(-5n >> -2n, -0x14n, "-5n >> -2n === -0x14n");
     74 assert.sameValue(-5n >> -3n, -0x28n, "-5n >> -3n === -0x28n");
     75 assert.sameValue(-5n >> 1n, -3n, "-5n >> 1n === -3n");
     76 assert.sameValue(-5n >> 2n, -2n, "-5n >> 2n === -2n");
     77 assert.sameValue(-5n >> 3n, -1n, "-5n >> 3n === -1n");
     78 assert.sameValue(-1n >> -128n, -0x100000000000000000000000000000000n, "-1n >> -128n === -0x100000000000000000000000000000000n");
     79 assert.sameValue(-1n >> 0n, -1n, "-1n >> 0n === -1n");
     80 assert.sameValue(-1n >> 128n, -1n, "-1n >> 128n === -1n");
     81 assert.sameValue(-0x246n >> 0n, -0x246n, "-0x246n >> 0n === -0x246n");
     82 assert.sameValue(-0x246n >> -127n, -0x12300000000000000000000000000000000n, "-0x246n >> -127n === -0x12300000000000000000000000000000000n");
     83 assert.sameValue(-0x246n >> -128n, -0x24600000000000000000000000000000000n, "-0x246n >> -128n === -0x24600000000000000000000000000000000n");
     84 assert.sameValue(-0x246n >> -129n, -0x48c00000000000000000000000000000000n, "-0x246n >> -129n === -0x48c00000000000000000000000000000000n");
     85 assert.sameValue(-0x246n >> 128n, -1n, "-0x246n >> 128n === -1n");
     86 assert.sameValue(
     87  -0x123456789abcdef0fedcba9876543212345678n >> -64n, -0x123456789abcdef0fedcba98765432123456780000000000000000n,
     88  "-0x123456789abcdef0fedcba9876543212345678n >> -64n === -0x123456789abcdef0fedcba98765432123456780000000000000000n");
     89 assert.sameValue(
     90  -0x123456789abcdef0fedcba9876543212345678n >> -32n, -0x123456789abcdef0fedcba987654321234567800000000n,
     91  "-0x123456789abcdef0fedcba9876543212345678n >> -32n === -0x123456789abcdef0fedcba987654321234567800000000n");
     92 assert.sameValue(
     93  -0x123456789abcdef0fedcba9876543212345678n >> -16n, -0x123456789abcdef0fedcba98765432123456780000n,
     94  "-0x123456789abcdef0fedcba9876543212345678n >> -16n === -0x123456789abcdef0fedcba98765432123456780000n");
     95 assert.sameValue(
     96  -0x123456789abcdef0fedcba9876543212345678n >> 0n, -0x123456789abcdef0fedcba9876543212345678n,
     97  "-0x123456789abcdef0fedcba9876543212345678n >> 0n === -0x123456789abcdef0fedcba9876543212345678n");
     98 assert.sameValue(
     99  -0x123456789abcdef0fedcba9876543212345678n >> 16n, -0x123456789abcdef0fedcba987654321235n,
    100  "-0x123456789abcdef0fedcba9876543212345678n >> 16n === -0x123456789abcdef0fedcba987654321235n");
    101 assert.sameValue(
    102  -0x123456789abcdef0fedcba9876543212345678n >> 32n, -0x123456789abcdef0fedcba98765433n,
    103  "-0x123456789abcdef0fedcba9876543212345678n >> 32n === -0x123456789abcdef0fedcba98765433n");
    104 assert.sameValue(
    105  -0x123456789abcdef0fedcba9876543212345678n >> 64n, -0x123456789abcdef0fedcbbn,
    106  "-0x123456789abcdef0fedcba9876543212345678n >> 64n === -0x123456789abcdef0fedcbbn");
    107 assert.sameValue(
    108  -0x123456789abcdef0fedcba9876543212345678n >> 127n, -0x2468adn,
    109  "-0x123456789abcdef0fedcba9876543212345678n >> 127n === -0x2468adn");
    110 assert.sameValue(
    111  -0x123456789abcdef0fedcba9876543212345678n >> 128n, -0x123457n,
    112  "-0x123456789abcdef0fedcba9876543212345678n >> 128n === -0x123457n");
    113 assert.sameValue(
    114  -0x123456789abcdef0fedcba9876543212345678n >> 129n, -0x91a2cn,
    115  "-0x123456789abcdef0fedcba9876543212345678n >> 129n === -0x91a2cn");
    116 
    117 reportCompare(0, 0);