11// Test values at boundary of safe integer range
2- local max_safe = 9007199254740992 ; // 2^53
3- local min_safe = -9007199254740992 ; // -2^53
2+ local max_safe = 9007199254740991 ; // 2^53 - 1
3+ local min_safe = -9007199254740991 ; // -( 2^53 - 1)
44
5- std.assertEqual (max_safe & 1 , 0 ) && // Check 2^53
6- std.assertEqual (min_safe & 1 , 0 ) && // Check -2^53
7- std.assertEqual ((max_safe - 1 ) & 1 , 1 ) && // Check 2^53 - 1
8- std.assertEqual ((min_safe + 1 ) & 1 , 1 ) && // Check -2^53 + 1
5+ std.assertEqual (max_safe & 1 , 1 ) && // Check 2^53
6+ std.assertEqual (min_safe & 1 , 1 ) && // Check -2^53
7+ std.assertEqual ((max_safe - 1 ) & 1 , 0 ) && // Check 2^53 - 1
8+ std.assertEqual ((min_safe + 1 ) & 1 , 0 ) && // Check -2^53
99
1010std.assertEqual (~(max_safe - 1 ), min_safe) && // ~(2^53 - 1) == -2^53
1111std.assertEqual (~(min_safe + 1 ), max_safe - 2 ) && // ~(-2^53 + 1) == 2^53 - 2
@@ -17,18 +17,18 @@ std.assertEqual(~(-1), 0) &&
1717
1818// Test shift operations with large values at safe boundary
1919// (2^53 - 1) right shift by 4 bits
20- std.assertEqual (( max_safe - 1 ) >> 4 , 562949953421311 ) &&
21- // MAX_SAFE_INTEGER (2^53) right shift by 1 bit
22- std.assertEqual (max_safe >> 1 , 4503599627370496 ) && // 2^52
23- // MIN_SAFE_INTEGER (- 2^53) right shift by 1 bit
24- std.assertEqual (min_safe >> 1 , -4503599627370496 ) && // -2^52
20+ std.assertEqual (max_safe >> 4 , 562949953421311 ) &&
21+ // MAX_SAFE_INTEGER (2^53 - 1 ) right shift by 1 bit is (2^52 - 1)
22+ std.assertEqual (max_safe >> 1 , 4503599627370495 ) && // 2^52
23+ // MIN_SAFE_INTEGER -( 2^53 - 1 ) right shift by 1 bit is (-2^52)
24+ std.assertEqual (min_safe >> 1 , -4503599627370496 ) && // -2^52
2525
2626// Cannot left shift 2^53 without potential overflow/loss of precision issues
2727// depending on the shift amount, but can shift smaller numbers up to it.
2828// (2^52) left shift by 1 bit (result is 2^53)
29- std.assertEqual ((max_safe >> 1 ) << 1 , max_safe) &&
30- // (-2^52) left shift by 1 bit (result is -2^53)
31- std.assertEqual ((min_safe >> 1 ) << 1 , min_safe) &&
29+ std.assertEqual (4503599627370495 << 1 , max_safe - 1 ) &&
30+ // (-( 2^52-1)) left shift by 1 bit (result is -( 2^53-2) )
31+ std.assertEqual ((- 4503599627370495 ) << 1 , min_safe + 1 ) &&
3232
3333// Test larger values within safe range
3434std.assertEqual (~123456789 , -123456790 ) &&
@@ -41,4 +41,4 @@ std.assertEqual(123 ^ 456, 435) &&
4141std.assertEqual (123 << 2 , 492 ) &&
4242std.assertEqual (123 >> 2 , 30 ) &&
4343
44- true
44+ true
0 commit comments