micropython: add micropython component
This commit is contained in:
84
components/language/micropython/tests/basics/int_small.py
Normal file
84
components/language/micropython/tests/basics/int_small.py
Normal file
@@ -0,0 +1,84 @@
|
||||
# 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
|
||||
|
||||
# compile-time constexprs
|
||||
print(1 + 3)
|
||||
print(3 - 2)
|
||||
print(2 * 3)
|
||||
print(1 & 3)
|
||||
print(1 | 2)
|
||||
print(1 ^ 3)
|
||||
print(+3)
|
||||
print(-3)
|
||||
print(~3)
|
||||
|
||||
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)
|
Reference in New Issue
Block a user