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