| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # 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)
|