Constant folding in the parser can now operate on big ints, whatever their representation. This is now possible because the parser can create parse nodes holding arbitrary objects. For the case of small ints the folding is still efficient in RAM because the folded small int is stored inplace in the parse node. Adds 48 bytes to code size on Thumb2 architecture. Helps reduce heap usage because more constants can be computed at compile time, leading to a smaller parse tree, and most importantly means that the constants don't have to be computed at runtime (perhaps more than once). Parser will now be a little slower when folding due to calls to runtime to do the arithmetic.
92 lines
1.9 KiB
Python
92 lines
1.9 KiB
Python
# tests for things that are not implemented, or have non-compliant behaviour
|
|
|
|
import array
|
|
|
|
# array deletion not implemented
|
|
try:
|
|
a = array.array('b', (1, 2, 3))
|
|
del a[1]
|
|
except TypeError:
|
|
print('TypeError')
|
|
|
|
# slice with step!=1 not implemented
|
|
try:
|
|
a = array.array('b', (1, 2, 3))
|
|
print(a[3:2:2])
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# should raise type error
|
|
try:
|
|
print(set('12') >= '1')
|
|
except TypeError:
|
|
print('TypeError')
|
|
|
|
# should raise type error
|
|
try:
|
|
print(set('12') <= '123')
|
|
except TypeError:
|
|
print('TypeError')
|
|
|
|
# uPy raises TypeError, shold be ValueError
|
|
try:
|
|
'%c' % b'\x01\x02'
|
|
except (TypeError, ValueError):
|
|
print('TypeError, ValueError')
|
|
|
|
# attributes/subscr not implemented
|
|
try:
|
|
print('{a[0]}'.format(a=[1, 2]))
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# str(...) with keywords not implemented
|
|
try:
|
|
str(b'abc', encoding='utf8')
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# str.rsplit(None, n) not implemented
|
|
try:
|
|
'a a a'.rsplit(None, 1)
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# str.endswith(s, start) not implemented
|
|
try:
|
|
'abc'.endswith('c', 1)
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# bytes(...) with keywords not implemented
|
|
try:
|
|
bytes('abc', encoding='utf8')
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# bytes subscr with step!=1 not implemented
|
|
try:
|
|
b'123'[0:3:2]
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
mpz = 1 << 70
|
|
|
|
# mpz and with both args negative
|
|
try:
|
|
-mpz & -2
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# mpz or with args opposite sign
|
|
try:
|
|
-mpz | 2
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|
|
|
|
# mpz xor with args opposite sign
|
|
try:
|
|
-mpz ^ 2
|
|
except NotImplementedError:
|
|
print('NotImplementedError')
|