fix ctypes test alignment assumptions (closes #20946)
Patch by Andreas Schwab.
This commit is contained in:
parent
c7692805f7
commit
e3af6f0a88
|
@ -207,7 +207,7 @@ class BitFieldTest(unittest.TestCase):
|
|||
class X(Structure):
|
||||
_fields_ = [("a", c_byte, 4),
|
||||
("b", c_int, 32)]
|
||||
self.assertEqual(sizeof(X), sizeof(c_int)*2)
|
||||
self.assertEqual(sizeof(X), alignment(c_int)+sizeof(c_int))
|
||||
|
||||
def test_mixed_3(self):
|
||||
class X(Structure):
|
||||
|
|
|
@ -83,7 +83,7 @@ class StructureTestCase(unittest.TestCase):
|
|||
class Y(Structure):
|
||||
_fields_ = [("x", c_char * 3),
|
||||
("y", c_int)]
|
||||
self.assertEqual(alignment(Y), calcsize("i"))
|
||||
self.assertEqual(alignment(Y), alignment(c_int))
|
||||
self.assertEqual(sizeof(Y), calcsize("3si"))
|
||||
|
||||
class SI(Structure):
|
||||
|
@ -175,23 +175,23 @@ class StructureTestCase(unittest.TestCase):
|
|||
self.assertEqual(sizeof(X), 10)
|
||||
self.assertEqual(X.b.offset, 2)
|
||||
|
||||
class X(Structure):
|
||||
_fields_ = [("a", c_byte),
|
||||
("b", c_longlong)]
|
||||
_pack_ = 4
|
||||
self.assertEqual(sizeof(X), 12)
|
||||
self.assertEqual(X.b.offset, 4)
|
||||
|
||||
import struct
|
||||
longlong_size = struct.calcsize("q")
|
||||
longlong_align = struct.calcsize("bq") - longlong_size
|
||||
|
||||
class X(Structure):
|
||||
_fields_ = [("a", c_byte),
|
||||
("b", c_longlong)]
|
||||
_pack_ = 4
|
||||
self.assertEqual(sizeof(X), min(4, longlong_align) + longlong_size)
|
||||
self.assertEqual(X.b.offset, min(4, longlong_align))
|
||||
|
||||
class X(Structure):
|
||||
_fields_ = [("a", c_byte),
|
||||
("b", c_longlong)]
|
||||
_pack_ = 8
|
||||
|
||||
self.assertEqual(sizeof(X), longlong_align + longlong_size)
|
||||
self.assertEqual(sizeof(X), min(8, longlong_align) + longlong_size)
|
||||
self.assertEqual(X.b.offset, min(8, longlong_align))
|
||||
|
||||
|
||||
|
|
|
@ -271,6 +271,8 @@ IDLE
|
|||
Tests
|
||||
-----
|
||||
|
||||
- Issue #20946: Correct alignment assumptions of some ctypes tests.
|
||||
|
||||
- Issue #20743: Fix a reference leak in test_tcl.
|
||||
|
||||
- Issue #20510: Rewrote test_exit in test_sys to match existing comments,
|
||||
|
|
|
@ -1687,9 +1687,9 @@ typedef struct { char c; void *x; } s_void_p;
|
|||
/*
|
||||
#define CHAR_ALIGN (sizeof(s_char) - sizeof(char))
|
||||
#define SHORT_ALIGN (sizeof(s_short) - sizeof(short))
|
||||
#define INT_ALIGN (sizeof(s_int) - sizeof(int))
|
||||
#define LONG_ALIGN (sizeof(s_long) - sizeof(long))
|
||||
*/
|
||||
#define INT_ALIGN (sizeof(s_int) - sizeof(int))
|
||||
#define FLOAT_ALIGN (sizeof(s_float) - sizeof(float))
|
||||
#define DOUBLE_ALIGN (sizeof(s_double) - sizeof(double))
|
||||
#define LONGDOUBLE_ALIGN (sizeof(s_long_double) - sizeof(long double))
|
||||
|
@ -1731,8 +1731,8 @@ ffi_type ffi_type_sint8 = { 1, 1, FFI_TYPE_SINT8 };
|
|||
ffi_type ffi_type_uint16 = { 2, 2, FFI_TYPE_UINT16 };
|
||||
ffi_type ffi_type_sint16 = { 2, 2, FFI_TYPE_SINT16 };
|
||||
|
||||
ffi_type ffi_type_uint32 = { 4, 4, FFI_TYPE_UINT32 };
|
||||
ffi_type ffi_type_sint32 = { 4, 4, FFI_TYPE_SINT32 };
|
||||
ffi_type ffi_type_uint32 = { 4, INT_ALIGN, FFI_TYPE_UINT32 };
|
||||
ffi_type ffi_type_sint32 = { 4, INT_ALIGN, FFI_TYPE_SINT32 };
|
||||
|
||||
ffi_type ffi_type_uint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_UINT64 };
|
||||
ffi_type ffi_type_sint64 = { 8, LONG_LONG_ALIGN, FFI_TYPE_SINT64 };
|
||||
|
|
Loading…
Reference in New Issue