summaryrefslogtreecommitdiff
path: root/tests/memoryview/memoryview_pep484_typing.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/memoryview/memoryview_pep484_typing.pyx')
-rw-r--r--tests/memoryview/memoryview_pep484_typing.pyx96
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