lv_micropython/tests/ports/unix/extra_coverage.py.exp
Jim Mussared 557d31ed2c py/objint: Try to convert big-int back to small-int after binary op.
Before this change, long/mpz ints propagated into all future calculations,
even if their value could fit in a small-int object.  With this change, the
result of a big-int binary op will now be converted to a small-int object
if the value fits in a small-int.

For example, a relatively common operation like `x = a * b // c` where
a,b,c all small ints would always result in a long/mpz int, even if it
didn't need to, and then this would impact all future calculations with
x.

This adds +24 bytes on PYBV11 but avoids heap allocations and potential
surprises (e.g. `big-big` is now a small `0`, and can safely be accessed
with MP_OBJ_SMALL_INT_VALUE).

Performance tests are unchanged on PYBV10, except for `bm_pidigits.py`
which makes heavy use of big-ints and gains about 8% in speed.

Unix coverage tests have been updated to cover mpz code that is now
unreachable by normal Python code (removing the unreachable code would lead
to some surprising gaps in the internal C functions and the functionality
may be needed in the future, so it is kept because it has minimal
overhead).

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2024-07-01 13:52:59 +10:00

229 lines
2.9 KiB
Plaintext

# mp_printf
-123 +123 123
-0123
123
123
1ABCDEF
ab abc ' abc' ' True' 'Tru'
false true
(null)
-2147483648
2147483648
80000000
80000000
abc
%
# GC
0
0
# GC part 2
pass
# tracked allocation
m_tracked_head = 0
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
m_tracked_head = 0
# vstr
tests
sts
test
tes
RuntimeError:
RuntimeError:
# repl
ame__
port
builtins micropython _asyncio _thread
array binascii btree cexample
cmath collections cppexample cryptolib
deflate errno example_package
ffi framebuf gc hashlib
heapq io json machine
math os platform random
re select socket struct
sys termios time tls
uctypes vfs websocket
me
micropython machine math
argv atexit byteorder exc_info
executable exit getsizeof implementation
intern maxsize modules path
platform print_exception ps1
ps2 stderr stdin stdout
tracebacklimit version version_info
ementation
# attrtuple
(start=1, stop=2, step=3)
# str
1
# bytearray
data
# mpz
1
12345678
0
0
0
0
0
1
12345
6
-1
# runtime utils
TypeError: unsupported type for __abs__: 'str'
TypeError: unsupported types for __divmod__: 'str', 'str'
0
1
2
OverflowError: overflow converting long int to machine word
OverflowError: overflow converting long int to machine word
ValueError:
Warning: test
# format float
?
+1e+00
+1e+00
# binary
123
456
# VM
2 1
# scheduler
sched(0)=1
sched(1)=1
sched(2)=1
sched(3)=1
sched(4)=0
unlocked
0
1
2
3
KeyboardInterrupt:
KeyboardInterrupt:
10
# ringbuf
99 0
98 1
22
99 0
97 2
aa55
99 0
0 99
-1
1 98
-1
2 97
0
cc99
99 0
0
11bb
0
22ff
-1
-1
# pairheap
create: 0 0 0 0
pop all: 0 1 2 3
create: 7 6 5 4 3 2 1 0
pop all: 0 1 2 3 4 5 6 7
create: 1 - - 1 1 1 1 1 1
pop all: 1 2
create: 1 1 1 1 2 2
pop all: 2 4
create: 1 1 1 1 1
pop all: 1 3 4
create: 3 3 3 1 1 1
pop all: 1 2 4 5
# mp_obj_is_type
1 1
0 0
1 1
1 1
0 0
1 1
# end coverage.c
0123456789 b'0123456789'
7300
7300
7300
7300
None
None
None
None
None
None
b'123'
b'123'
b'123'
OSError
0
None
None
cpp None
(3, 'hellocpp')
frzstr1
frzstr1.py
frzmpy1
frzmpy1.py
frzstr_pkg1.__init__
frzstr_pkg1/__init__.py 1
frzmpy_pkg1.__init__
frzmpy_pkg1/__init__.py 1
frzstr_pkg2.mod
1
frzmpy_pkg2.mod
1
ZeroDivisionError
\
X
'\x1b'
b'\x00\xff'
frzmpy4 1
frzmpy4 2
NULL
uPy
a long string that is not interned
a string that has unicode αβγ chars
b'bytes 1234\x01'
123456789
0
1
2
3
frozentest.py
example_package.__init__
<module 'example_package.foo.bar'>
example_package.foo.bar.f
<module 'example_package'> <module 'example_package.foo'> <module 'example_package.foo.bar'>
example_package.f
example_package.foo.f
example_package.foo.bar.f
True
example_package.foo.f
True