Skip to content

Commit 5750b2b

Browse files
committed
Improve ctypes buffer test
1 parent 0aea685 commit 5750b2b

File tree

1 file changed

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

1 file changed

+25
-7
lines changed

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

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,25 @@
7878
}
7979
8080
static PyObject* buffer_tester_itemsize(BufferTesterObject* self) {
81-
return PyLong_FromLong(self->buffer.itemsize);
81+
return PyLong_FromSsize_t(self->buffer.itemsize);
8282
}
8383
8484
static PyObject* buffer_tester_format(BufferTesterObject* self) {
8585
return PyBytes_FromString(self->buffer.format);
8686
}
87+
88+
static PyObject* buffer_tester_shape(BufferTesterObject* self) {
89+
PyObject* tuple = PyTuple_New(self->buffer.ndim);
90+
if (!tuple)
91+
return NULL;
92+
for (int i = 0; i < self->buffer.ndim; i++) {
93+
PyObject* value = PyLong_FromSsize_t(self->buffer.shape[i]);
94+
if (!value)
95+
return NULL;
96+
PyTuple_SET_ITEM(tuple, i, value);
97+
}
98+
return tuple;
99+
}
87100
''',
88101
tp_new='buffer_tester_new',
89102
tp_methods='''
@@ -94,17 +107,22 @@
94107
{"obj", (getter)buffer_tester_obj, NULL, NULL, NULL},
95108
{"bytes", (getter)buffer_tester_bytes, NULL, NULL, NULL},
96109
{"itemsize", (getter)buffer_tester_itemsize, NULL, NULL, NULL},
97-
{"format", (getter)buffer_tester_format, NULL, NULL, NULL}
110+
{"format", (getter)buffer_tester_format, NULL, NULL, NULL},
111+
{"shape", (getter)buffer_tester_shape, NULL, NULL, NULL}
98112
''',
99113
)
100114

101115

102116
class TestCDataBuffer(CPyExtTestCase):
103117
def test_buffer(self):
104-
numbers = [1, 2, 3, 4]
105-
array = (ctypes.c_int * 4)(*numbers)
118+
int_format = struct.Struct(">i")
119+
inner_type = ctypes.c_int.__ctype_be__ * 2
120+
outer_type = inner_type * 2
121+
array = outer_type(inner_type(1, 2), inner_type(3, 4))
106122
with BufferTester(array) as buffer:
107123
assert buffer.obj is array
108-
assert buffer.bytes == b''.join(struct.pack("i", n) for n in numbers)
109-
assert buffer.itemsize == 4
110-
assert buffer.format == b'<i'
124+
assert buffer.bytes == b''.join(int_format.pack(n) for n in [1, 2, 3, 4])
125+
assert buffer.itemsize == int_format.size
126+
assert buffer.format.startswith(b'>')
127+
assert struct.Struct(buffer.format).size == int_format.size
128+
assert buffer.shape == (2, 2)

0 commit comments

Comments
 (0)