12c66be2b8
Used gcov to find some parts of vm.c, runtime.c, obj.c that were not covered by any tests. Still need to use gcov more thoroughly.
74 lines
1.4 KiB
Python
74 lines
1.4 KiB
Python
# This tests small int range for 32-bit machine
|
|
|
|
# Small ints are variable-length encoded in MicroPython, so first
|
|
# test that encoding works as expected.
|
|
|
|
print(0)
|
|
print(1)
|
|
print(-1)
|
|
# Value is split in 7-bit "subwords", and taking into account that all
|
|
# ints in Python are signed, there're 6 bits of magnitude. So, around 2^6
|
|
# there's "turning point"
|
|
print(63)
|
|
print(64)
|
|
print(65)
|
|
print(-63)
|
|
print(-64)
|
|
print(-65)
|
|
# Maximum values of small ints on 32-bit platform
|
|
print(1073741823)
|
|
# Per python semantics, lexical integer is without a sign (i.e. positive)
|
|
# and '-' is unary minus operation applied to it. That's why -1073741824
|
|
# (min two-complement's negative value) is not allowed.
|
|
print(-1073741823)
|
|
|
|
# Operations tests
|
|
|
|
a = 0x3fffff
|
|
print(a)
|
|
a *= 0x10
|
|
print(a)
|
|
a *= 0x10
|
|
print(a)
|
|
a += 0xff
|
|
print(a)
|
|
# This would overflow
|
|
#a += 1
|
|
|
|
a = -0x3fffff
|
|
print(a)
|
|
a *= 0x10
|
|
print(a)
|
|
a *= 0x10
|
|
print(a)
|
|
a -= 0xff
|
|
print(a)
|
|
# This still doesn't overflow
|
|
a -= 1
|
|
print(a)
|
|
# This would overflow
|
|
#a -= 1
|
|
|
|
# negative shifts are not allowed
|
|
try:
|
|
a << -1
|
|
except ValueError:
|
|
print("ValueError")
|
|
try:
|
|
a >> -1
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# Shifts to big amounts are undefined behavior in C and is CPU-specific
|
|
|
|
# These are compile-time constexprs
|
|
print(1 >> 32)
|
|
print(1 >> 64)
|
|
print(1 >> 128)
|
|
|
|
# These are runtime calcs
|
|
a = 1
|
|
print(a >> 32)
|
|
print(a >> 64)
|
|
print(a >> 128)
|