Skip to content

Commit f0a3427

Browse files
committed
Use correct min/max values of C types
1 parent 3fec793 commit f0a3427

File tree

1 file changed

+30
-22
lines changed
  • graalpython/com.oracle.graal.python.test/src/tests/cpyext

1 file changed

+30
-22
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_member.py

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def test_member(self):
9090
"TestMember",
9191
'''
9292
#include <string.h>
93+
#include <limits.h>
9394
9495
PyObject* set_string(PyObject *self, PyObject *arg) {
9596
TestMemberObject *tmo = (TestMemberObject *)self;
@@ -100,18 +101,32 @@ def test_member(self):
100101
Py_INCREF(Py_None);
101102
return Py_None;
102103
}
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) {
105120
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));
115130
return result;
116131
}
117132
''',
@@ -158,7 +173,8 @@ def test_member(self):
158173
""",
159174
tp_methods='''
160175
{"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, ""}
162178
''',
163179
)
164180

@@ -198,16 +214,8 @@ def test_member(self):
198214
warnings.simplefilter("ignore")
199215

200216
# 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()
211219

212220
# all int-like members smaller than C long
213221
for i, m in enumerate(("member_byte", "member_ubyte", "member_short", "member_ushort", "member_int",

0 commit comments

Comments
 (0)