tor-browser

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

bigint.js (6943B)


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