kopia lustrzana https://github.com/micropython/micropython
53 wiersze
1.3 KiB
Python
53 wiersze
1.3 KiB
Python
import sys
|
|
|
|
# Depending on the port, the numbers in this test may be implemented as "small"
|
|
# native 64 bit ints, arbitrary precision large ints, or large integers using 64-bit
|
|
# long longs.
|
|
|
|
try:
|
|
x = int.from_bytes(b"\x6F\xAB\xCD\x12\x34\x56\x78\xFB", "big")
|
|
except OverflowError:
|
|
print("SKIP") # Port can't represent this size of integer at all
|
|
raise SystemExit
|
|
|
|
print(hex(x))
|
|
b = x.to_bytes(8, "little")
|
|
print(b)
|
|
print(x.to_bytes(8, "big"))
|
|
|
|
# padding in output
|
|
print(x.to_bytes(20, "little"))
|
|
print(x.to_bytes(20, "big"))
|
|
|
|
# check that extra zero bytes don't change the internal int value
|
|
print(int.from_bytes(b + bytes(10), "little") == x)
|
|
|
|
# can't write to a zero-length bytes object
|
|
try:
|
|
x.to_bytes(0, "little")
|
|
except OverflowError:
|
|
print("OverflowError")
|
|
|
|
# or one that it too short
|
|
try:
|
|
x.to_bytes(7, "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(-x, 8, "little"))
|
|
print(to_bytes_compat(-x, 20, "big"))
|
|
print(to_bytes_compat(-x, 20, "little"))
|