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);