@@ -64,6 +64,69 @@ test_config(PyObject *self)
6464 return Py_None ;
6565}
6666
67+ static PyObject *
68+ test_sizeof_c_types (PyObject * self )
69+ {
70+ #define CHECK_SIZEOF (TYPE , EXPECTED ) \
71+ if (EXPECTED != sizeof(TYPE)) { \
72+ PyErr_Format(TestError, \
73+ "sizeof(%s) = %u instead of %u", \
74+ #TYPE, sizeof(TYPE), EXPECTED); \
75+ return (PyObject*)NULL; \
76+ }
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+ }
85+
86+ /* integer types */
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 );
93+ #ifdef HAVE_INT32_T
94+ CHECK_SIZEOF (PY_INT32_T , 4 );
95+ CHECK_SIGNNESS (PY_INT32_T , 1 );
96+ #endif
97+ #ifdef HAVE_UINT32_T
98+ CHECK_SIZEOF (PY_UINT32_T , 4 );
99+ CHECK_SIGNNESS (PY_UINT32_T , 0 );
100+ #endif
101+ #ifdef HAVE_INT64_T
102+ CHECK_SIZEOF (PY_INT64_T , 8 );
103+ CHECK_SIGNNESS (PY_INT64_T , 1 );
104+ #endif
105+ #ifdef HAVE_UINT64_T
106+ CHECK_SIZEOF (PY_UINT64_T , 8 );
107+ CHECK_SIGNNESS (PY_UINT64_T , 0 );
108+ #endif
109+
110+ /* pointer/size types */
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 );
120+
121+ Py_INCREF (Py_None );
122+ return Py_None ;
123+
124+ #undef IS_SIGNED
125+ #undef CHECK_SIGNESS
126+ #undef CHECK_SIZEOF
127+ }
128+
129+
67130static PyObject *
68131test_list_api (PyObject * self )
69132{
@@ -2783,6 +2846,7 @@ static PyMethodDef TestMethods[] = {
27832846 {"raise_exception" , raise_exception , METH_VARARGS },
27842847 {"raise_memoryerror" , (PyCFunction )raise_memoryerror , METH_NOARGS },
27852848 {"test_config" , (PyCFunction )test_config , METH_NOARGS },
2849+ {"test_sizeof_c_types" , (PyCFunction )test_sizeof_c_types , METH_NOARGS },
27862850 {"test_datetime_capi" , test_datetime_capi , METH_NOARGS },
27872851 {"test_list_api" , (PyCFunction )test_list_api , METH_NOARGS },
27882852 {"test_dict_iteration" , (PyCFunction )test_dict_iteration ,METH_NOARGS },
0 commit comments