|
1 | 1 | //@ runBigIntEnabled |
2 | 2 |
|
3 | 3 | // Copyright (C) 2017 Josh Wolfe. All rights reserved. |
| 4 | +// Copyright (C) 2020 Apple. All rights reserved |
4 | 5 | // This code is governed by the BSD license found in the LICENSE file. |
5 | 6 |
|
6 | | -function assert(a) { |
7 | | - if (!a) |
8 | | - throw new Error("Bad assertion"); |
| 7 | +function testRightShift(left, right, expected) |
| 8 | +{ |
| 9 | + var result = left >> right; |
| 10 | + if (result !== expected) |
| 11 | + throw new Error("" + left + ", " + right + " resulted in " + result + " but expected " + expected); |
9 | 12 | } |
10 | 13 |
|
11 | | -assert.sameValue = function (input, expected, message) { |
12 | | - if (input !== expected) |
13 | | - throw new Error(message); |
| 14 | +for (var i = 0; i < 1000 ; ++i) { |
| 15 | + testRightShift(0n, 0n, 0n); |
| 16 | + testRightShift(0b101n, -1n, 0b1010n); |
| 17 | + testRightShift(0b101n, -2n, 0b10100n); |
| 18 | + testRightShift(0b101n, -3n, 0b101000n); |
| 19 | + testRightShift(0b101n, 1n, 0b10n); |
| 20 | + testRightShift(0b101n, 2n, 1n); |
| 21 | + testRightShift(0b101n, 3n, 0n); |
| 22 | + testRightShift(0n, -128n, 0n); |
| 23 | + testRightShift(0n, 128n, 0n); |
| 24 | + testRightShift(0x246n, 0n, 0x246n); |
| 25 | + testRightShift(0x246n, -127n, 0x12300000000000000000000000000000000n); |
| 26 | + testRightShift(0x246n, -128n, 0x24600000000000000000000000000000000n); |
| 27 | + testRightShift(0x246n, -129n, 0x48c00000000000000000000000000000000n); |
| 28 | + testRightShift(0x246n, 128n, 0n); |
| 29 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, -64n, 0x123456789abcdef0fedcba98765432123456780000000000000000n); |
| 30 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, -32n, 0x123456789abcdef0fedcba987654321234567800000000n); |
| 31 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, -16n, 0x123456789abcdef0fedcba98765432123456780000n); |
| 32 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 0n, 0x123456789abcdef0fedcba9876543212345678n); |
| 33 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 16n, 0x123456789abcdef0fedcba987654321234n); |
| 34 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 32n, 0x123456789abcdef0fedcba98765432n); |
| 35 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 64n, 0x123456789abcdef0fedcban); |
| 36 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 127n, 0x2468acn); |
| 37 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 128n, 0x123456n); |
| 38 | + testRightShift(0x123456789abcdef0fedcba9876543212345678n, 129n, 0x91a2bn); |
| 39 | + testRightShift(-5n, -1n, -0xan); |
| 40 | + testRightShift(-5n, -2n, -0x14n); |
| 41 | + testRightShift(-5n, -3n, -0x28n); |
| 42 | + testRightShift(-5n, 1n, -3n); |
| 43 | + testRightShift(-5n, 2n, -2n); |
| 44 | + testRightShift(-5n, 3n, -1n); |
| 45 | + testRightShift(-1n, -128n, -0x100000000000000000000000000000000n); |
| 46 | + testRightShift(-1n, 0n, -1n); |
| 47 | + testRightShift(-1n, 128n, -1n); |
| 48 | + testRightShift(-0x246n, 0n, -0x246n); |
| 49 | + testRightShift(-0x246n, -127n, -0x12300000000000000000000000000000000n); |
| 50 | + testRightShift(-0x246n, -128n, -0x24600000000000000000000000000000000n); |
| 51 | + testRightShift(-0x246n, -129n, -0x48c00000000000000000000000000000000n); |
| 52 | + testRightShift(-0x246n, 128n, -1n); |
| 53 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, -64n, -0x123456789abcdef0fedcba98765432123456780000000000000000n); |
| 54 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, -32n, -0x123456789abcdef0fedcba987654321234567800000000n); |
| 55 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, -16n, -0x123456789abcdef0fedcba98765432123456780000n); |
| 56 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 0n, -0x123456789abcdef0fedcba9876543212345678n); |
| 57 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 16n, -0x123456789abcdef0fedcba987654321235n); |
| 58 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 32n, -0x123456789abcdef0fedcba98765433n); |
| 59 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 64n, -0x123456789abcdef0fedcbbn); |
| 60 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 127n, -0x2468adn); |
| 61 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 128n, -0x123457n); |
| 62 | + testRightShift(-0x123456789abcdef0fedcba9876543212345678n, 129n, -0x91a2cn); |
14 | 63 | } |
15 | | - |
16 | | -assert.sameValue(0n >> 0n, 0n, "0n >> 0n === 0n"); |
17 | | -assert.sameValue(0b101n >> -1n, 0b1010n, "0b101n >> -1n === 0b1010n"); |
18 | | -assert.sameValue(0b101n >> -2n, 0b10100n, "0b101n >> -2n === 0b10100n"); |
19 | | -assert.sameValue(0b101n >> -3n, 0b101000n, "0b101n >> -3n === 0b101000n"); |
20 | | -assert.sameValue(0b101n >> 1n, 0b10n, "0b101n >> 1n === 0b10n"); |
21 | | -assert.sameValue(0b101n >> 2n, 1n, "0b101n >> 2n === 1n"); |
22 | | -assert.sameValue(0b101n >> 3n, 0n, "0b101n >> 3n === 0n"); |
23 | | -assert.sameValue(0n >> -128n, 0n, "0n >> -128n === 0n"); |
24 | | -assert.sameValue(0n >> 128n, 0n, "0n >> 128n === 0n"); |
25 | | -assert.sameValue(0x246n >> 0n, 0x246n, "0x246n >> 0n === 0x246n"); |
26 | | -assert.sameValue(0x246n >> -127n, 0x12300000000000000000000000000000000n, "0x246n >> -127n === 0x12300000000000000000000000000000000n"); |
27 | | -assert.sameValue(0x246n >> -128n, 0x24600000000000000000000000000000000n, "0x246n >> -128n === 0x24600000000000000000000000000000000n"); |
28 | | -assert.sameValue(0x246n >> -129n, 0x48c00000000000000000000000000000000n, "0x246n >> -129n === 0x48c00000000000000000000000000000000n"); |
29 | | -assert.sameValue(0x246n >> 128n, 0n, "0x246n >> 128n === 0n"); |
30 | | -assert.sameValue( |
31 | | - 0x123456789abcdef0fedcba9876543212345678n >> -64n, 0x123456789abcdef0fedcba98765432123456780000000000000000n, |
32 | | - "0x123456789abcdef0fedcba9876543212345678n >> -64n === 0x123456789abcdef0fedcba98765432123456780000000000000000n"); |
33 | | -assert.sameValue( |
34 | | - 0x123456789abcdef0fedcba9876543212345678n >> -32n, 0x123456789abcdef0fedcba987654321234567800000000n, |
35 | | - "0x123456789abcdef0fedcba9876543212345678n >> -32n === 0x123456789abcdef0fedcba987654321234567800000000n"); |
36 | | -assert.sameValue( |
37 | | - 0x123456789abcdef0fedcba9876543212345678n >> -16n, 0x123456789abcdef0fedcba98765432123456780000n, |
38 | | - "0x123456789abcdef0fedcba9876543212345678n >> -16n === 0x123456789abcdef0fedcba98765432123456780000n"); |
39 | | -assert.sameValue( |
40 | | - 0x123456789abcdef0fedcba9876543212345678n >> 0n, 0x123456789abcdef0fedcba9876543212345678n, |
41 | | - "0x123456789abcdef0fedcba9876543212345678n >> 0n === 0x123456789abcdef0fedcba9876543212345678n"); |
42 | | -assert.sameValue( |
43 | | - 0x123456789abcdef0fedcba9876543212345678n >> 16n, 0x123456789abcdef0fedcba987654321234n, |
44 | | - "0x123456789abcdef0fedcba9876543212345678n >> 16n === 0x123456789abcdef0fedcba987654321234n"); |
45 | | -assert.sameValue( |
46 | | - 0x123456789abcdef0fedcba9876543212345678n >> 32n, 0x123456789abcdef0fedcba98765432n, |
47 | | - "0x123456789abcdef0fedcba9876543212345678n >> 32n === 0x123456789abcdef0fedcba98765432n"); |
48 | | -assert.sameValue( |
49 | | - 0x123456789abcdef0fedcba9876543212345678n >> 64n, 0x123456789abcdef0fedcban, |
50 | | - "0x123456789abcdef0fedcba9876543212345678n >> 64n === 0x123456789abcdef0fedcban"); |
51 | | -assert.sameValue( |
52 | | - 0x123456789abcdef0fedcba9876543212345678n >> 127n, 0x2468acn, |
53 | | - "0x123456789abcdef0fedcba9876543212345678n >> 127n === 0x2468acn"); |
54 | | -assert.sameValue( |
55 | | - 0x123456789abcdef0fedcba9876543212345678n >> 128n, 0x123456n, |
56 | | - "0x123456789abcdef0fedcba9876543212345678n >> 128n === 0x123456n"); |
57 | | -assert.sameValue( |
58 | | - 0x123456789abcdef0fedcba9876543212345678n >> 129n, 0x91a2bn, |
59 | | - "0x123456789abcdef0fedcba9876543212345678n >> 129n === 0x91a2bn"); |
60 | | -assert.sameValue(-5n >> -1n, -0xan, "-5n >> -1n === -0xan"); |
61 | | -assert.sameValue(-5n >> -2n, -0x14n, "-5n >> -2n === -0x14n"); |
62 | | -assert.sameValue(-5n >> -3n, -0x28n, "-5n >> -3n === -0x28n"); |
63 | | -assert.sameValue(-5n >> 1n, -3n, "-5n >> 1n === -3n"); |
64 | | -assert.sameValue(-5n >> 2n, -2n, "-5n >> 2n === -2n"); |
65 | | -assert.sameValue(-5n >> 3n, -1n, "-5n >> 3n === -1n"); |
66 | | -assert.sameValue(-1n >> -128n, -0x100000000000000000000000000000000n, "-1n >> -128n === -0x100000000000000000000000000000000n"); |
67 | | -assert.sameValue(-1n >> 0n, -1n, "-1n >> 0n === -1n"); |
68 | | -assert.sameValue(-1n >> 128n, -1n, "-1n >> 128n === -1n"); |
69 | | -assert.sameValue(-0x246n >> 0n, -0x246n, "-0x246n >> 0n === -0x246n"); |
70 | | -assert.sameValue(-0x246n >> -127n, -0x12300000000000000000000000000000000n, "-0x246n >> -127n === -0x12300000000000000000000000000000000n"); |
71 | | -assert.sameValue(-0x246n >> -128n, -0x24600000000000000000000000000000000n, "-0x246n >> -128n === -0x24600000000000000000000000000000000n"); |
72 | | -assert.sameValue(-0x246n >> -129n, -0x48c00000000000000000000000000000000n, "-0x246n >> -129n === -0x48c00000000000000000000000000000000n"); |
73 | | -assert.sameValue(-0x246n >> 128n, -1n, "-0x246n >> 128n === -1n"); |
74 | | -assert.sameValue( |
75 | | - -0x123456789abcdef0fedcba9876543212345678n >> -64n, -0x123456789abcdef0fedcba98765432123456780000000000000000n, |
76 | | - "-0x123456789abcdef0fedcba9876543212345678n >> -64n === -0x123456789abcdef0fedcba98765432123456780000000000000000n"); |
77 | | -assert.sameValue( |
78 | | - -0x123456789abcdef0fedcba9876543212345678n >> -32n, -0x123456789abcdef0fedcba987654321234567800000000n, |
79 | | - "-0x123456789abcdef0fedcba9876543212345678n >> -32n === -0x123456789abcdef0fedcba987654321234567800000000n"); |
80 | | -assert.sameValue( |
81 | | - -0x123456789abcdef0fedcba9876543212345678n >> -16n, -0x123456789abcdef0fedcba98765432123456780000n, |
82 | | - "-0x123456789abcdef0fedcba9876543212345678n >> -16n === -0x123456789abcdef0fedcba98765432123456780000n"); |
83 | | -assert.sameValue( |
84 | | - -0x123456789abcdef0fedcba9876543212345678n >> 0n, -0x123456789abcdef0fedcba9876543212345678n, |
85 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 0n === -0x123456789abcdef0fedcba9876543212345678n"); |
86 | | -assert.sameValue( |
87 | | - -0x123456789abcdef0fedcba9876543212345678n >> 16n, -0x123456789abcdef0fedcba987654321235n, |
88 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 16n === -0x123456789abcdef0fedcba987654321235n"); |
89 | | -assert.sameValue( |
90 | | - -0x123456789abcdef0fedcba9876543212345678n >> 32n, -0x123456789abcdef0fedcba98765433n, |
91 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 32n === -0x123456789abcdef0fedcba98765433n"); |
92 | | -assert.sameValue( |
93 | | - -0x123456789abcdef0fedcba9876543212345678n >> 64n, -0x123456789abcdef0fedcbbn, |
94 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 64n === -0x123456789abcdef0fedcbbn"); |
95 | | -assert.sameValue( |
96 | | - -0x123456789abcdef0fedcba9876543212345678n >> 127n, -0x2468adn, |
97 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 127n === -0x2468adn"); |
98 | | -assert.sameValue( |
99 | | - -0x123456789abcdef0fedcba9876543212345678n >> 128n, -0x123457n, |
100 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 128n === -0x123457n"); |
101 | | -assert.sameValue( |
102 | | - -0x123456789abcdef0fedcba9876543212345678n >> 129n, -0x91a2cn, |
103 | | - "-0x123456789abcdef0fedcba9876543212345678n >> 129n === -0x91a2cn"); |
104 | | - |
0 commit comments