Skip to content

Commit f6a93dd

Browse files
committed
More test improvements
1 parent 68e2d61 commit f6a93dd

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

Lib/test/test_ctypes/test_aligned_structures.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from ctypes import (
2-
c_char, c_uint32, c_ubyte, c_byte, alignment, sizeof,
2+
c_char, c_uint32, c_uint16, c_ubyte, c_byte, alignment, sizeof,
33
BigEndianStructure, LittleEndianStructure,
44
BigEndianUnion, LittleEndianUnion,
55
)
@@ -17,7 +17,7 @@ def test_aligned_string(self):
1717
class Aligned(base):
1818
_align_ = 16
1919
_fields_ = [
20-
('value', c_char * 16),
20+
('value', c_char * 12)
2121
]
2222

2323
class Main(base):
@@ -37,21 +37,20 @@ class Main(base):
3737

3838
def test_aligned_structures(self):
3939
for base, data in (
40-
(LittleEndianStructure, bytearray(b"\1\0\0\0\1\0\1\0\7\0\0\0")),
41-
(BigEndianStructure, bytearray(b"\1\0\0\0\1\0\1\0\0\0\0\7")),
40+
(LittleEndianStructure, bytearray(b"\1\0\0\0\1\0\0\0\7\0\0\0")),
41+
(BigEndianStructure, bytearray(b"\1\0\0\0\1\0\0\0\7\0\0\0")),
4242
):
4343
class SomeBools(base):
4444
_align_ = 4
4545
_fields_ = [
4646
("bool1", c_ubyte),
4747
("bool2", c_ubyte),
48-
("bool3", c_ubyte),
4948
]
5049
class Main(base):
5150
_fields_ = [
5251
("x", c_ubyte),
5352
("y", SomeBools),
54-
("z", c_uint32),
53+
("z", c_ubyte),
5554
]
5655

5756
main = Main.from_buffer(data)
@@ -63,7 +62,6 @@ class Main(base):
6362
self.assertEqual(Main.y.size, 4)
6463
self.assertEqual(main.y.bool1, True)
6564
self.assertEqual(main.y.bool2, False)
66-
self.assertEqual(main.y.bool3, True)
6765
self.assertEqual(Main.z.offset, 8)
6866
self.assertEqual(main.z, 7)
6967

@@ -189,28 +187,38 @@ class Main(sbase):
189187
self.assertEqual(main.union.b.y, 4)
190188

191189
def test_smaller_aligned_subclassed_union(self):
192-
for ubase, e in (
193-
(LittleEndianUnion, "<"),
194-
(BigEndianUnion, ">"),
190+
for sbase, ubase, e in (
191+
(LittleEndianStructure, LittleEndianUnion, "<"),
192+
(BigEndianStructure, BigEndianUnion, ">"),
195193
):
196-
data = bytearray(struct.pack(f"{e}I", 0xD60102D6))
194+
data = bytearray(struct.pack(f"{e}H2xI", 1, 0xD60102D7))
197195
class SubUnion(ubase):
198196
_align_ = 2
199197
_fields_ = [
200198
("unsigned", c_ubyte),
201199
("signed", c_byte),
202200
]
203201

204-
class Main(SubUnion):
202+
class MainUnion(SubUnion):
205203
_fields_ = [
206204
("num", c_uint32)
207205
]
208206

207+
class Main(sbase):
208+
_fields_ = [
209+
("first", c_uint16),
210+
("union", MainUnion),
211+
]
212+
209213
main = Main.from_buffer(data)
214+
self.assertEqual(main.union.num, 0xD60102D7)
215+
self.assertEqual(main.union.unsigned, data[4])
216+
self.assertEqual(main.union.signed, data[4] - 256)
210217
self.assertEqual(alignment(main), 4)
211-
self.assertEqual(main.num, 0xD60102D6)
212-
self.assertEqual(main.unsigned, 0xD6)
213-
self.assertEqual(main.signed, -42)
218+
self.assertEqual(alignment(main.union), 4)
219+
self.assertEqual(Main.union.offset, 4)
220+
self.assertEqual(Main.union.size, 4)
221+
self.assertEqual(Main.first.size, 2)
214222

215223
def test_larger_aligned_subclassed_union(self):
216224
for ubase, e in (
@@ -232,6 +240,7 @@ class Main(SubUnion):
232240

233241
main = Main.from_buffer(data)
234242
self.assertEqual(alignment(main), 8)
243+
self.assertEqual(sizeof(main), 8)
235244
self.assertEqual(main.num, 0xD60102D6)
236245
self.assertEqual(main.unsigned, 0xD6)
237246
self.assertEqual(main.signed, -42)

0 commit comments

Comments
 (0)