1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:37:43 +00:00

LibCrypto+LibJS: Better bigint bitwise_and binop

Bitwise and is defined in terms of two's complement, so some converting
needs to happen for SignedBigInteger's sign/magnitude representation to
work out.

UnsignedBigInteger::bitwise_not() is repurposed to convert all
high-order zero bits to ones up to a limit, for the two's complement
conversion to work.

Fixes test262/test/language/expressions/bitwise-and/bigint.js.
This commit is contained in:
Nico Weber 2022-01-17 19:54:02 -05:00 committed by Ali Mohammad Pur
parent 945d962322
commit 1f98639396
7 changed files with 52 additions and 23 deletions

View file

@ -37,8 +37,14 @@ describe("correct behavior", () => {
test("bitwise operators", () => {
expect(12n & 5n).toBe(4n);
expect(3n & -2n).toBe(2n);
expect(-3n & -2n).toBe(-4n);
expect(-3n & 2n).toBe(0n);
expect(1n | 2n).toBe(3n);
expect(5n ^ 3n).toBe(6n);
expect(~1n).toBe(-2n);
expect(~-1n).toBe(0n);