diff options
Diffstat (limited to 'tests/memoryview/memoryview_pep484_typing.pyx')
-rw-r--r-- | tests/memoryview/memoryview_pep484_typing.pyx | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/tests/memoryview/memoryview_pep484_typing.pyx b/tests/memoryview/memoryview_pep484_typing.pyx new file mode 100644 index 000000000..66445a1b7 --- /dev/null +++ b/tests/memoryview/memoryview_pep484_typing.pyx @@ -0,0 +1,96 @@ +# mode: run +# tag: pep484, memoryview + +cimport cython + +include "../buffers/mockbuffers.pxi" + + +def get_int_2d(mslice: cython.int[:, :], i: cython.int, j: cython.int) -> cython.int: + """ + >>> C = IntMockBuffer("C", range(6), (2,3)) + >>> get_int_2d(C, 1, 1) + acquired C + released C + 4 + + Check negative indexing: + >>> get_int_2d(C, -1, 0) + acquired C + released C + 3 + >>> get_int_2d(C, -1, -2) + acquired C + released C + 4 + >>> get_int_2d(C, -2, -3) + acquired C + released C + 0 + + Out-of-bounds errors: + >>> get_int_2d(C, 2, 0) + Traceback (most recent call last): + ... + IndexError: Out of bounds on buffer access (axis 0) + >>> get_int_2d(C, 0, -4) + Traceback (most recent call last): + ... + IndexError: Out of bounds on buffer access (axis 1) + """ + buf = mslice + return buf[i, j] + + +def set_int_2d(mslice: cython.int[:, :], i: cython.int, j: cython.int, value: cython.int) -> cython.int: + """ + Uses get_int_2d to read back the value afterwards. For pure + unit test, one should support reading in MockBuffer instead. + + >>> C = IntMockBuffer("C", range(6), (2,3)) + >>> set_int_2d(C, 1, 1, 10) + acquired C + released C + >>> get_int_2d(C, 1, 1) + acquired C + released C + 10 + + Check negative indexing: + >>> set_int_2d(C, -1, 0, 3) + acquired C + released C + >>> get_int_2d(C, -1, 0) + acquired C + released C + 3 + + >>> set_int_2d(C, -1, -2, 8) + acquired C + released C + >>> get_int_2d(C, -1, -2) + acquired C + released C + 8 + + >>> set_int_2d(C, -2, -3, 9) + acquired C + released C + >>> get_int_2d(C, -2, -3) + acquired C + released C + 9 + + Out-of-bounds errors: + >>> set_int_2d(C, 2, 0, 19) + Traceback (most recent call last): + ... + IndexError: Out of bounds on buffer access (axis 0) + >>> set_int_2d(C, 0, -4, 19) + Traceback (most recent call last): + ... + IndexError: Out of bounds on buffer access (axis 1) + + """ + buf = mslice + buf[i, j] = value |