tests/uctypes_sizeof_od: Test for using OrderedDict as struct descriptor
Just a copy of uctypes_sizeof.py with minimal changes.
This commit is contained in:
parent
9fbd12f2fa
commit
7059b4af6d
48
tests/extmod/uctypes_sizeof_od.py
Normal file
48
tests/extmod/uctypes_sizeof_od.py
Normal file
@ -0,0 +1,48 @@
|
||||
try:
|
||||
from ucollections import OrderedDict
|
||||
import uctypes
|
||||
except ImportError:
|
||||
print("SKIP")
|
||||
raise SystemExit
|
||||
|
||||
desc = OrderedDict({
|
||||
# arr is array at offset 0, of UINT8 elements, array size is 2
|
||||
"arr": (uctypes.ARRAY | 0, uctypes.UINT8 | 2),
|
||||
# arr2 is array at offset 0, size 2, of structures defined recursively
|
||||
"arr2": (uctypes.ARRAY | 0, 2, {"b": uctypes.UINT8 | 0}),
|
||||
"arr3": (uctypes.ARRAY | 2, uctypes.UINT16 | 2),
|
||||
"arr4": (uctypes.ARRAY | 0, 2, {"b": uctypes.UINT8 | 0, "w": uctypes.UINT16 | 1}),
|
||||
"sub": (0, {
|
||||
'b1': uctypes.BFUINT8 | 0 | 4 << uctypes.BF_POS | 4 << uctypes.BF_LEN,
|
||||
'b2': uctypes.BFUINT8 | 0 | 0 << uctypes.BF_POS | 4 << uctypes.BF_LEN,
|
||||
}),
|
||||
})
|
||||
|
||||
data = bytearray(b"01234567")
|
||||
|
||||
S = uctypes.struct(uctypes.addressof(data), desc, uctypes.LITTLE_ENDIAN)
|
||||
|
||||
print(uctypes.sizeof(S.arr))
|
||||
assert uctypes.sizeof(S.arr) == 2
|
||||
|
||||
print(uctypes.sizeof(S.arr2))
|
||||
assert uctypes.sizeof(S.arr2) == 2
|
||||
|
||||
print(uctypes.sizeof(S.arr3))
|
||||
|
||||
try:
|
||||
print(uctypes.sizeof(S.arr3[0]))
|
||||
except TypeError:
|
||||
print("TypeError")
|
||||
|
||||
print(uctypes.sizeof(S.arr4))
|
||||
assert uctypes.sizeof(S.arr4) == 6
|
||||
|
||||
print(uctypes.sizeof(S.sub))
|
||||
assert uctypes.sizeof(S.sub) == 1
|
||||
|
||||
# invalid descriptor
|
||||
try:
|
||||
print(uctypes.sizeof([]))
|
||||
except TypeError:
|
||||
print("TypeError")
|
7
tests/extmod/uctypes_sizeof_od.py.exp
Normal file
7
tests/extmod/uctypes_sizeof_od.py.exp
Normal file
@ -0,0 +1,7 @@
|
||||
2
|
||||
2
|
||||
4
|
||||
TypeError
|
||||
6
|
||||
1
|
||||
TypeError
|
Loading…
Reference in New Issue
Block a user