@@ -67,38 +67,62 @@ test_config(PyObject *self)
6767static PyObject *
6868test_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