@@ -90,6 +90,7 @@ def test_member(self):
90
90
"TestMember" ,
91
91
'''
92
92
#include <string.h>
93
+ #include <limits.h>
93
94
94
95
PyObject* set_string(PyObject *self, PyObject *arg) {
95
96
TestMemberObject *tmo = (TestMemberObject *)self;
@@ -100,18 +101,32 @@ def test_member(self):
100
101
Py_INCREF(Py_None);
101
102
return Py_None;
102
103
}
103
-
104
- PyObject* get_sizes(PyObject *self) {
104
+
105
+ PyObject* get_min_values(PyObject *self) {
106
+ PyObject *result = PyTuple_New(9);
107
+ PyTuple_SetItem(result, 0, PyLong_FromSsize_t(CHAR_MIN));
108
+ PyTuple_SetItem(result, 1, PyLong_FromLong(0));
109
+ PyTuple_SetItem(result, 2, PyLong_FromSsize_t(SHRT_MIN));
110
+ PyTuple_SetItem(result, 3, PyLong_FromLong(0));
111
+ PyTuple_SetItem(result, 4, PyLong_FromSsize_t(INT_MIN));
112
+ PyTuple_SetItem(result, 5, PyLong_FromLong(0));
113
+ PyTuple_SetItem(result, 6, PyLong_FromSsize_t(LONG_MIN));
114
+ PyTuple_SetItem(result, 7, PyLong_FromLong(0));
115
+ PyTuple_SetItem(result, 8, PyLong_FromSsize_t(PY_SSIZE_T_MIN));
116
+ return result;
117
+ }
118
+
119
+ PyObject* get_max_values(PyObject *self) {
105
120
PyObject *result = PyTuple_New(9);
106
- PyTuple_SetItem(result, 0, PyLong_FromSize_t(sizeof(char) ));
107
- PyTuple_SetItem(result, 1, PyLong_FromSize_t(sizeof(unsigned char) ));
108
- PyTuple_SetItem(result, 2, PyLong_FromSize_t(sizeof(short) ));
109
- PyTuple_SetItem(result, 3, PyLong_FromSize_t(sizeof(unsigned short) ));
110
- PyTuple_SetItem(result, 4, PyLong_FromSize_t(sizeof(int) ));
111
- PyTuple_SetItem(result, 5, PyLong_FromSize_t(sizeof(unsigned int) ));
112
- PyTuple_SetItem(result, 6, PyLong_FromSize_t(sizeof(long) ));
113
- PyTuple_SetItem(result, 7, PyLong_FromSize_t(sizeof(unsigned long) ));
114
- PyTuple_SetItem(result, 8, PyLong_FromSize_t(sizeof(Py_ssize_t) ));
121
+ PyTuple_SetItem(result, 0, PyLong_FromSize_t(CHAR_MAX ));
122
+ PyTuple_SetItem(result, 1, PyLong_FromSize_t(UCHAR_MAX ));
123
+ PyTuple_SetItem(result, 2, PyLong_FromSize_t(SHRT_MAX ));
124
+ PyTuple_SetItem(result, 3, PyLong_FromSize_t(USHRT_MAX ));
125
+ PyTuple_SetItem(result, 4, PyLong_FromSize_t(INT_MAX ));
126
+ PyTuple_SetItem(result, 5, PyLong_FromSize_t(UINT_MAX ));
127
+ PyTuple_SetItem(result, 6, PyLong_FromSize_t(LONG_MAX ));
128
+ PyTuple_SetItem(result, 7, PyLong_FromSize_t(ULONG_MAX ));
129
+ PyTuple_SetItem(result, 8, PyLong_FromSize_t(PY_SSIZE_T_MAX ));
115
130
return result;
116
131
}
117
132
''' ,
@@ -158,7 +173,8 @@ def test_member(self):
158
173
""" ,
159
174
tp_methods = '''
160
175
{"set_string", (PyCFunction)set_string, METH_O, ""},
161
- {"get_sizes", (PyCFunction)get_sizes, METH_NOARGS, ""}
176
+ {"get_min_values", (PyCFunction)get_min_values, METH_NOARGS, ""},
177
+ {"get_max_values", (PyCFunction)get_max_values, METH_NOARGS, ""}
162
178
''' ,
163
179
)
164
180
@@ -198,16 +214,8 @@ def test_member(self):
198
214
warnings .simplefilter ("ignore" )
199
215
200
216
# char, uchar, short, ushort, int, uint, long, ulong, Py_ssize_t
201
- sizes = obj .get_sizes ()
202
- max_values = [0 ] * len (sizes )
203
- min_values = [0 ] * len (sizes )
204
- for i , size in enumerate (sizes ):
205
- if i % 2 == 0 :
206
- max_values [i ] = (1 << (size * 8 - 1 )) - 1
207
- min_values [i ] = - (1 << (size * 8 - 1 ))
208
- else :
209
- max_values [i ] = (1 << (size * 8 )) - 1
210
- min_values [i ] = 0
217
+ max_values = obj .get_max_values ()
218
+ min_values = obj .get_min_values ()
211
219
212
220
# all int-like members smaller than C long
213
221
for i , m in enumerate (("member_byte" , "member_ubyte" , "member_short" , "member_ushort" , "member_int" ,
0 commit comments