|
| 1 | +// Test values at boundary of safe integer range |
| 2 | +std.assertEqual(~9007199254740991, -9007199254740992) && // ~MAX_SAFE_INTEGER |
| 3 | +std.assertEqual(~(-9007199254740991), 9007199254740990) && // ~MIN_SAFE_INTEGER |
| 4 | + |
| 5 | +// Test basic values |
| 6 | +std.assertEqual(~0, -1) && |
| 7 | +std.assertEqual(~1, -2) && |
| 8 | +std.assertEqual(~(-1), 0) && |
| 9 | + |
| 10 | +// Test shift operations with large values at safe boundary |
| 11 | +// MAX_SAFE_INTEGER (2^53-1) right shift by 4 bits |
| 12 | +std.assertEqual(9007199254740991 >> 4, 562949953421311) && |
| 13 | +// MAX_SAFE_INTEGER (2^53-1) left shift by 1 bit (result is still precisely representable) |
| 14 | +std.assertEqual(9007199254740991 << 1, 18014398509481982) && |
| 15 | +// (2^52-1) left shift by 1 bit (result is MAX_SAFE_INTEGER-1) |
| 16 | +std.assertEqual(4503599627370495 << 1, 9007199254740990) && |
| 17 | + |
| 18 | +// Test larger values within safe range |
| 19 | +std.assertEqual(~123456789, -123456790) && |
| 20 | +std.assertEqual(~(-987654321), 987654320) && |
| 21 | + |
| 22 | +// Test other bitwise operations |
| 23 | +std.assertEqual(123 & 456, 72) && |
| 24 | +std.assertEqual(123 | 456, 507) && |
| 25 | +std.assertEqual(123 ^ 456, 435) && |
| 26 | +std.assertEqual(123 << 2, 492) && |
| 27 | +std.assertEqual(123 >> 2, 30) && |
| 28 | + |
| 29 | +true |
0 commit comments