summaryrefslogtreecommitdiff
path: root/tests/basics/int_bytes_intbig.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/int_bytes_intbig.py')
-rw-r--r--tests/basics/int_bytes_intbig.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/basics/int_bytes_intbig.py b/tests/basics/int_bytes_intbig.py
index 147362bef..13cf5d008 100644
--- a/tests/basics/int_bytes_intbig.py
+++ b/tests/basics/int_bytes_intbig.py
@@ -1,3 +1,5 @@
+import sys
+
print((2**64).to_bytes(9, "little"))
print((2**64).to_bytes(9, "big"))
@@ -10,5 +12,51 @@ print(ib)
print(il.to_bytes(20, "little"))
print(ib.to_bytes(20, "big"))
+# check padding comes out correctly
+print(il.to_bytes(40, "little"))
+print(ib.to_bytes(40, "big"))
+
# check that extra zero bytes don't change the internal int value
print(int.from_bytes(b + bytes(10), "little") == int.from_bytes(b, "little"))
+
+# can't write to a zero-length bytes object
+try:
+ ib.to_bytes(0, "little")
+except OverflowError:
+ print("OverflowError")
+
+# or one that it too short
+try:
+ ib.to_bytes(18, "big")
+except OverflowError:
+ print("OverflowError")
+
+# negative representations
+
+# MicroPython int.to_bytes() behaves as if signed=True for negative numbers
+if "micropython" in repr(sys.implementation):
+
+ def to_bytes_compat(i, l, e):
+ return i.to_bytes(l, e)
+else:
+ # Implement MicroPython compatible behaviour for CPython
+ def to_bytes_compat(i, l, e):
+ return i.to_bytes(l, e, signed=i < 0)
+
+
+print(to_bytes_compat(-ib, 20, "big"))
+print(to_bytes_compat(ib * -ib, 40, "big"))
+
+# case where an additional byte is needed for sign bit
+ib = (2**64) - 1
+print(ib.to_bytes(8, "little"))
+
+ib *= -1
+
+try:
+ print(to_bytes_compat(ib, 8, "little"))
+except OverflowError:
+ print("OverflowError")
+
+print(to_bytes_compat(ib, 9, "little"))
+print(to_bytes_compat(ib, 9, "big"))