Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f866f97

Browse files
committed
Issue #19433: test_capi: check signness of some C types
1 parent 0107655 commit f866f97

1 file changed

Lines changed: 34 additions & 10 deletions

File tree

Modules/_testcapimodule.c

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,38 +67,62 @@ test_config(PyObject *self)
6767
static PyObject*
6868
test_sizeof_c_types(PyObject *self)
6969
{
70-
#define CHECK_SIZEOF(EXPECTED, TYPE) \
70+
#define CHECK_SIZEOF(TYPE, EXPECTED) \
7171
if (EXPECTED != sizeof(TYPE)) { \
7272
PyErr_Format(TestError, \
7373
"sizeof(%s) = %u instead of %u", \
7474
#TYPE, sizeof(TYPE), EXPECTED); \
7575
return (PyObject*)NULL; \
7676
}
77+
#define IS_SIGNED(TYPE) (((TYPE)-1) < (TYPE)0)
78+
#define CHECK_SIGNNESS(TYPE, SIGNED) \
79+
if (IS_SIGNED(TYPE) != SIGNED) { \
80+
PyErr_Format(TestError, \
81+
"%s signness is, instead of %i", \
82+
#TYPE, IS_SIGNED(TYPE), SIGNED); \
83+
return (PyObject*)NULL; \
84+
}
7785

7886
/* integer types */
79-
CHECK_SIZEOF(1, Py_UCS1);
80-
CHECK_SIZEOF(2, Py_UCS2);
81-
CHECK_SIZEOF(4, Py_UCS4);
87+
CHECK_SIZEOF(Py_UCS1, 1);
88+
CHECK_SIZEOF(Py_UCS2, 2);
89+
CHECK_SIZEOF(Py_UCS4, 4);
90+
CHECK_SIGNNESS(Py_UCS1, 0);
91+
CHECK_SIGNNESS(Py_UCS2, 0);
92+
CHECK_SIGNNESS(Py_UCS4, 0);
8293
#ifdef HAVE_INT32_T
83-
CHECK_SIZEOF(4, PY_INT32_T);
94+
CHECK_SIZEOF(PY_INT32_T, 4);
95+
CHECK_SIGNNESS(PY_INT32_T, 1);
8496
#endif
8597
#ifdef HAVE_UINT32_T
86-
CHECK_SIZEOF(4, PY_UINT32_T);
98+
CHECK_SIZEOF(PY_UINT32_T, 4);
99+
CHECK_SIGNNESS(PY_UINT32_T, 0);
87100
#endif
88101
#ifdef HAVE_INT64_T
89-
CHECK_SIZEOF(8, PY_INT64_T);
102+
CHECK_SIZEOF(PY_INT64_T, 8);
103+
CHECK_SIGNNESS(PY_INT64_T, 1);
90104
#endif
91105
#ifdef HAVE_UINT64_T
92-
CHECK_SIZEOF(8, PY_UINT64_T);
106+
CHECK_SIZEOF(PY_UINT64_T, 8);
107+
CHECK_SIGNNESS(PY_UINT64_T, 0);
93108
#endif
94109

95110
/* pointer/size types */
96-
CHECK_SIZEOF(sizeof(void *), size_t);
97-
CHECK_SIZEOF(sizeof(void *), Py_ssize_t);
111+
CHECK_SIZEOF(size_t, sizeof(void *));
112+
CHECK_SIGNNESS(size_t, 0);
113+
CHECK_SIZEOF(Py_ssize_t, sizeof(void *));
114+
CHECK_SIGNNESS(Py_ssize_t, 1);
115+
116+
CHECK_SIZEOF(Py_uintptr_t, sizeof(void *));
117+
CHECK_SIGNNESS(Py_uintptr_t, 0);
118+
CHECK_SIZEOF(Py_intptr_t, sizeof(void *));
119+
CHECK_SIGNNESS(Py_intptr_t, 1);
98120

99121
Py_INCREF(Py_None);
100122
return Py_None;
101123

124+
#undef IS_SIGNED
125+
#undef CHECK_SIGNESS
102126
#undef CHECK_SIZEOF
103127
}
104128

0 commit comments

Comments
 (0)