1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
try:
extra_coverage
except NameError:
print("SKIP")
raise SystemExit
import errno
import io
import uctypes
# create an int-like variable used for coverage of `mp_obj_get_ll`
buf = bytearray(b"\xde\xad\xbe\xef")
struct = uctypes.struct(
uctypes.addressof(buf),
{"f32": uctypes.UINT32 | 0},
uctypes.BIG_ENDIAN,
)
deadbeef = struct.f32
data = extra_coverage()
# test hashing of str/bytes that have an invalid hash
print(data[0], data[1])
print(hash(data[0]))
print(hash(data[1]))
print(hash(bytes(data[0], "utf8")))
print(hash(str(data[1], "utf8")))
# test streams
stream = data[2] # has set_error and set_buf. Write always returns error
stream.set_error(errno.EAGAIN) # non-blocking error
print(stream.read()) # read all encounters non-blocking error
print(stream.read(1)) # read 1 byte encounters non-blocking error
print(stream.readline()) # readline encounters non-blocking error
print(stream.readinto(bytearray(10))) # readinto encounters non-blocking error
print(stream.readinto1(bytearray(10))) # readinto1 encounters non-blocking error
print(stream.write(b"1")) # write encounters non-blocking error
print(stream.write1(b"1")) # write1 encounters non-blocking error
stream.set_buf(b"123")
print(stream.read(4)) # read encounters non-blocking error after successful reads
stream.set_buf(b"123")
print(stream.read1(4)) # read1 encounters non-blocking error after successful reads
stream.set_buf(b"123")
print(stream.readline(4)) # readline encounters non-blocking error after successful reads
try:
print(stream.ioctl(0, 0)) # ioctl encounters non-blocking error; raises OSError
except OSError:
print("OSError")
stream.set_error(0)
print(stream.ioctl(0, bytearray(10))) # successful ioctl call
print("# stream.readinto")
# stream.readinto will read 3 bytes then try to read more to fill the buffer,
# but on the second attempt will encounter EIO and should raise that error.
stream.set_error(errno.EIO)
stream.set_buf(b"123")
buf = bytearray(4)
try:
stream.readinto(buf)
except OSError as er:
print("OSError", er.errno == errno.EIO)
print(buf)
# stream.readinto1 will read 3 bytes then should return them immediately, and
# not encounter the EIO.
stream.set_error(errno.EIO)
stream.set_buf(b"123")
buf = bytearray(4)
print(stream.readinto1(buf), buf)
print("# stream textio")
stream2 = data[3] # is textio
print(stream2.read(1)) # read 1 byte encounters non-blocking error with textio stream
# test BufferedWriter with stream errors
stream.set_error(errno.EAGAIN)
buf = io.BufferedWriter(stream, 8)
print(buf.write(bytearray(16)))
# function defined in C++ code
print("cpp", extra_cpp_coverage())
# test user C module mixed with C++ code
import cppexample
print(cppexample.cppfunc(1, 2))
# test basic import of frozen scripts
import frzstr1
print(frzstr1.__file__)
import frzmpy1
print(frzmpy1.__file__)
# test import of frozen packages with __init__.py
import frzstr_pkg1
print(frzstr_pkg1.__file__, frzstr_pkg1.x)
import frzmpy_pkg1
print(frzmpy_pkg1.__file__, frzmpy_pkg1.x)
# test import of frozen packages without __init__.py
from frzstr_pkg2.mod import Foo
print(Foo.x)
from frzmpy_pkg2.mod import Foo
print(Foo.x)
# test raising exception in frozen script
try:
import frzmpy2
except ZeroDivisionError:
print("ZeroDivisionError")
# test importing various objects
import frzmpy3
# test importing other things
import frzmpy4
# test for MP_QSTR_NULL regression
from frzqstr import returns_NULL
print(returns_NULL())
# test for freeze_mpy (importing prints several lines)
import frozentest
print(frozentest.__file__)
# test for builtin sub-packages
from example_package.foo import bar
print(bar)
bar.f()
import example_package
print(example_package, example_package.foo, example_package.foo.bar)
example_package.f()
example_package.foo.f()
example_package.foo.bar.f()
print(bar == example_package.foo.bar)
from example_package.foo import f as foo_f
foo_f()
print(foo_f == example_package.foo.f)
|