summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/int_big_zeroone.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/int_big_zeroone.py')
-rw-r--r--tests/basics/int_big_zeroone.py41
1 files changed, 39 insertions, 2 deletions
diff --git a/tests/basics/int_big_zeroone.py b/tests/basics/int_big_zeroone.py
index 7e0b7a720e..81381526b9 100644
--- a/tests/basics/int_big_zeroone.py
+++ b/tests/basics/int_big_zeroone.py
@@ -1,4 +1,4 @@
-# test [0,-0,1,-1] edge cases of bignum
+# test [0,1,-1] edge cases of bignum
long_zero = (2**64) >> 65
long_neg_zero = -long_zero
@@ -13,7 +13,7 @@ print([~c for c in cases])
print([c >> 1 for c in cases])
print([c << 1 for c in cases])
-# comparison of 0/-0/+0
+# comparison of 0
print(long_zero == 0)
print(long_neg_zero == 0)
print(long_one - 1 == 0)
@@ -26,3 +26,40 @@ print(long_neg_zero < 1)
print(long_neg_zero < -1)
print(long_neg_zero > 1)
print(long_neg_zero > -1)
+
+# generate zeros that involve negative numbers
+large = 1 << 70
+large_plus_one = large + 1
+zeros = (
+ large - large,
+ -large + large,
+ large + -large,
+ -(large - large),
+ large - large_plus_one + 1,
+ -large & (large - large),
+ -large ^ -large,
+ -large * (large - large),
+ (large - large) // -large,
+ -large // -large_plus_one,
+ -(large + large) % large,
+ (large + large) % -large,
+ -(large + large) % -large,
+)
+print(zeros)
+
+# compute arithmetic operations that may have problems with -0
+# (this checks that -0 is never generated in the zeros tuple)
+cases = (0, 1, -1) + zeros
+for lhs in cases:
+ print("-{} = {}".format(lhs, -lhs))
+ print("~{} = {}".format(lhs, ~lhs))
+ print("{} >> 1 = {}".format(lhs, lhs >> 1))
+ print("{} << 1 = {}".format(lhs, lhs << 1))
+ for rhs in cases:
+ print("{} == {} = {}".format(lhs, rhs, lhs == rhs))
+ print("{} + {} = {}".format(lhs, rhs, lhs + rhs))
+ print("{} - {} = {}".format(lhs, rhs, lhs - rhs))
+ print("{} * {} = {}".format(lhs, rhs, lhs * rhs))
+ print("{} | {} = {}".format(lhs, rhs, lhs | rhs))
+ print("{} & {} = {}".format(lhs, rhs, lhs & rhs))
+ print("{} ^ {} = {}".format(lhs, rhs, lhs ^ rhs))