Issue #19433: test_capi: check signness of some C types
This commit is contained in:
parent
01076554b7
commit
f866f97ca8
|
@ -67,38 +67,62 @@ test_config(PyObject *self)
|
||||||
static PyObject*
|
static PyObject*
|
||||||
test_sizeof_c_types(PyObject *self)
|
test_sizeof_c_types(PyObject *self)
|
||||||
{
|
{
|
||||||
#define CHECK_SIZEOF(EXPECTED, TYPE) \
|
#define CHECK_SIZEOF(TYPE, EXPECTED) \
|
||||||
if (EXPECTED != sizeof(TYPE)) { \
|
if (EXPECTED != sizeof(TYPE)) { \
|
||||||
PyErr_Format(TestError, \
|
PyErr_Format(TestError, \
|
||||||
"sizeof(%s) = %u instead of %u", \
|
"sizeof(%s) = %u instead of %u", \
|
||||||
#TYPE, sizeof(TYPE), EXPECTED); \
|
#TYPE, sizeof(TYPE), EXPECTED); \
|
||||||
return (PyObject*)NULL; \
|
return (PyObject*)NULL; \
|
||||||
}
|
}
|
||||||
|
#define IS_SIGNED(TYPE) (((TYPE)-1) < (TYPE)0)
|
||||||
|
#define CHECK_SIGNNESS(TYPE, SIGNED) \
|
||||||
|
if (IS_SIGNED(TYPE) != SIGNED) { \
|
||||||
|
PyErr_Format(TestError, \
|
||||||
|
"%s signness is, instead of %i", \
|
||||||
|
#TYPE, IS_SIGNED(TYPE), SIGNED); \
|
||||||
|
return (PyObject*)NULL; \
|
||||||
|
}
|
||||||
|
|
||||||
/* integer types */
|
/* integer types */
|
||||||
CHECK_SIZEOF(1, Py_UCS1);
|
CHECK_SIZEOF(Py_UCS1, 1);
|
||||||
CHECK_SIZEOF(2, Py_UCS2);
|
CHECK_SIZEOF(Py_UCS2, 2);
|
||||||
CHECK_SIZEOF(4, Py_UCS4);
|
CHECK_SIZEOF(Py_UCS4, 4);
|
||||||
|
CHECK_SIGNNESS(Py_UCS1, 0);
|
||||||
|
CHECK_SIGNNESS(Py_UCS2, 0);
|
||||||
|
CHECK_SIGNNESS(Py_UCS4, 0);
|
||||||
#ifdef HAVE_INT32_T
|
#ifdef HAVE_INT32_T
|
||||||
CHECK_SIZEOF(4, PY_INT32_T);
|
CHECK_SIZEOF(PY_INT32_T, 4);
|
||||||
|
CHECK_SIGNNESS(PY_INT32_T, 1);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_UINT32_T
|
#ifdef HAVE_UINT32_T
|
||||||
CHECK_SIZEOF(4, PY_UINT32_T);
|
CHECK_SIZEOF(PY_UINT32_T, 4);
|
||||||
|
CHECK_SIGNNESS(PY_UINT32_T, 0);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_INT64_T
|
#ifdef HAVE_INT64_T
|
||||||
CHECK_SIZEOF(8, PY_INT64_T);
|
CHECK_SIZEOF(PY_INT64_T, 8);
|
||||||
|
CHECK_SIGNNESS(PY_INT64_T, 1);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_UINT64_T
|
#ifdef HAVE_UINT64_T
|
||||||
CHECK_SIZEOF(8, PY_UINT64_T);
|
CHECK_SIZEOF(PY_UINT64_T, 8);
|
||||||
|
CHECK_SIGNNESS(PY_UINT64_T, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* pointer/size types */
|
/* pointer/size types */
|
||||||
CHECK_SIZEOF(sizeof(void *), size_t);
|
CHECK_SIZEOF(size_t, sizeof(void *));
|
||||||
CHECK_SIZEOF(sizeof(void *), Py_ssize_t);
|
CHECK_SIGNNESS(size_t, 0);
|
||||||
|
CHECK_SIZEOF(Py_ssize_t, sizeof(void *));
|
||||||
|
CHECK_SIGNNESS(Py_ssize_t, 1);
|
||||||
|
|
||||||
|
CHECK_SIZEOF(Py_uintptr_t, sizeof(void *));
|
||||||
|
CHECK_SIGNNESS(Py_uintptr_t, 0);
|
||||||
|
CHECK_SIZEOF(Py_intptr_t, sizeof(void *));
|
||||||
|
CHECK_SIGNNESS(Py_intptr_t, 1);
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
|
|
||||||
|
#undef IS_SIGNED
|
||||||
|
#undef CHECK_SIGNESS
|
||||||
#undef CHECK_SIZEOF
|
#undef CHECK_SIZEOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue