Skip to content

Commit 61e92bf

Browse files
committed
Conditionally skip tests that assume sizeof(int64) == alignment(int64)
1 parent cace0c9 commit 61e92bf

File tree

1 file changed

+53
-37
lines changed

1 file changed

+53
-37
lines changed

Lib/test/test_ctypes/test_bitfields.py

Lines changed: 53 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -149,35 +149,41 @@ class X(Structure):
149149

150150
def test_signed(self):
151151
for c_typ in signed_int_types:
152-
class X(Structure):
153-
_fields_ = [("dummy", c_typ),
154-
("a", c_typ, 3),
155-
("b", c_typ, 3),
156-
("c", c_typ, 1)]
157-
self.assertEqual(sizeof(X), sizeof(c_typ)*2)
158-
159-
x = X()
160-
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0))
161-
x.a = -1
162-
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, -1, 0, 0))
163-
x.a, x.b = 0, -1
164-
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, -1, 0))
152+
with self.subTest(c_typ):
153+
if sizeof(c_typ) != alignment(c_typ):
154+
self.skipTest('assumes size=alignment')
155+
class X(Structure):
156+
_fields_ = [("dummy", c_typ),
157+
("a", c_typ, 3),
158+
("b", c_typ, 3),
159+
("c", c_typ, 1)]
160+
self.assertEqual(sizeof(X), sizeof(c_typ)*2)
161+
162+
x = X()
163+
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0))
164+
x.a = -1
165+
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, -1, 0, 0))
166+
x.a, x.b = 0, -1
167+
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, -1, 0))
165168

166169

167170
def test_unsigned(self):
168171
for c_typ in unsigned_int_types:
169-
class X(Structure):
170-
_fields_ = [("a", c_typ, 3),
171-
("b", c_typ, 3),
172-
("c", c_typ, 1)]
173-
self.assertEqual(sizeof(X), sizeof(c_typ))
174-
175-
x = X()
176-
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0))
177-
x.a = -1
178-
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 7, 0, 0))
179-
x.a, x.b = 0, -1
180-
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 7, 0))
172+
with self.subTest(c_typ):
173+
if sizeof(c_typ) != alignment(c_typ):
174+
self.skipTest('assumes size=alignment')
175+
class X(Structure):
176+
_fields_ = [("a", c_typ, 3),
177+
("b", c_typ, 3),
178+
("c", c_typ, 1)]
179+
self.assertEqual(sizeof(X), sizeof(c_typ))
180+
181+
x = X()
182+
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 0, 0))
183+
x.a = -1
184+
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 7, 0, 0))
185+
x.a, x.b = 0, -1
186+
self.assertEqual((c_typ, x.a, x.b, x.c), (c_typ, 0, 7, 0))
181187

182188
def fail_fields(self, *fields):
183189
return self.get_except(type(Structure), "X", (),
@@ -211,22 +217,28 @@ def test_c_wchar(self):
211217

212218
def test_single_bitfield_size(self):
213219
for c_typ in int_types:
214-
result = self.fail_fields(("a", c_typ, -1))
215-
self.assertEqual(result, (ValueError, "number of bits invalid for bit field 'a'"))
220+
with self.subTest(c_typ):
221+
if sizeof(c_typ) != alignment(c_typ):
222+
self.skipTest('assumes size=alignment')
223+
result = self.fail_fields(("a", c_typ, -1))
224+
self.assertEqual(result, (ValueError,
225+
"number of bits invalid for bit field 'a'"))
216226

217-
result = self.fail_fields(("a", c_typ, 0))
218-
self.assertEqual(result, (ValueError, "number of bits invalid for bit field 'a'"))
227+
result = self.fail_fields(("a", c_typ, 0))
228+
self.assertEqual(result, (ValueError,
229+
"number of bits invalid for bit field 'a'"))
219230

220-
class X(Structure):
221-
_fields_ = [("a", c_typ, 1)]
222-
self.assertEqual(sizeof(X), sizeof(c_typ))
231+
class X(Structure):
232+
_fields_ = [("a", c_typ, 1)]
233+
self.assertEqual(sizeof(X), sizeof(c_typ))
223234

224-
class X(Structure):
225-
_fields_ = [("a", c_typ, sizeof(c_typ)*8)]
226-
self.assertEqual(sizeof(X), sizeof(c_typ))
235+
class X(Structure):
236+
_fields_ = [("a", c_typ, sizeof(c_typ)*8)]
237+
self.assertEqual(sizeof(X), sizeof(c_typ))
227238

228-
result = self.fail_fields(("a", c_typ, sizeof(c_typ)*8 + 1))
229-
self.assertEqual(result, (ValueError, "number of bits invalid for bit field 'a'"))
239+
result = self.fail_fields(("a", c_typ, sizeof(c_typ)*8 + 1))
240+
self.assertEqual(result, (ValueError,
241+
"number of bits invalid for bit field 'a'"))
230242

231243
def test_multi_bitfields_size(self):
232244
class X(Structure):
@@ -318,6 +330,8 @@ class X(Structure):
318330
a.B = 1
319331
self.assertEqual(1, a.B)
320332

333+
@unittest.skipIf(sizeof(c_uint64) != alignment(c_uint64),
334+
'assumes size=alignment')
321335
def test_mixed_7(self):
322336
class X(Structure):
323337
_fields_ = [
@@ -353,6 +367,8 @@ class X(Structure):
353367
else:
354368
self.assertEqual(4, sizeof(X))
355369

370+
@unittest.skipIf(sizeof(c_uint64) != alignment(c_uint64),
371+
'assumes size=alignment')
356372
def test_mixed_10(self):
357373
class X(Structure):
358374
_fields_ = [

0 commit comments

Comments
 (0)