| Index: third_party/cython/src/Cython/Compiler/Tests/TestMemView.py
|
| diff --git a/third_party/cython/src/Cython/Compiler/Tests/TestMemView.py b/third_party/cython/src/Cython/Compiler/Tests/TestMemView.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e6ca87dd4f85cb52b95589ad3151c0f40cb3e90a
|
| --- /dev/null
|
| +++ b/third_party/cython/src/Cython/Compiler/Tests/TestMemView.py
|
| @@ -0,0 +1,71 @@
|
| +from Cython.TestUtils import CythonTest
|
| +import Cython.Compiler.Errors as Errors
|
| +from Cython.Compiler.Nodes import *
|
| +from Cython.Compiler.ParseTreeTransforms import *
|
| +from Cython.Compiler.Buffer import *
|
| +
|
| +
|
| +class TestMemviewParsing(CythonTest):
|
| +
|
| + def parse(self, s):
|
| + return self.should_not_fail(lambda: self.fragment(s)).root
|
| +
|
| + def not_parseable(self, expected_error, s):
|
| + e = self.should_fail(lambda: self.fragment(s), Errors.CompileError)
|
| + self.assertEqual(expected_error, e.message_only)
|
| +
|
| + def test_default_1dim(self):
|
| + self.parse(u"cdef int[:] x")
|
| + self.parse(u"cdef short int[:] x")
|
| +
|
| + def test_default_ndim(self):
|
| + self.parse(u"cdef int[:,:,:,:,:] x")
|
| + self.parse(u"cdef unsigned long int[:,:,:,:,:] x")
|
| + self.parse(u"cdef unsigned int[:,:,:,:,:] x")
|
| +
|
| + def test_zero_offset(self):
|
| + self.parse(u"cdef long double[0:] x")
|
| + self.parse(u"cdef int[0:] x")
|
| +
|
| + def test_zero_offset_ndim(self):
|
| + self.parse(u"cdef int[0:,0:,0:,0:] x")
|
| +
|
| + def test_def_arg(self):
|
| + self.parse(u"def foo(int[:,:] x): pass")
|
| +
|
| + def test_cdef_arg(self):
|
| + self.parse(u"cdef foo(int[:,:] x): pass")
|
| +
|
| + def test_general_slice(self):
|
| + self.parse(u'cdef float[::ptr, ::direct & contig, 0::full & strided] x')
|
| +
|
| + def test_non_slice_memview(self):
|
| + self.not_parseable(u"An axis specification in memoryview declaration does not have a ':'.",
|
| + u"cdef double[:foo, bar] x")
|
| + self.not_parseable(u"An axis specification in memoryview declaration does not have a ':'.",
|
| + u"cdef double[0:foo, bar] x")
|
| +
|
| + def test_basic(self):
|
| + t = self.parse(u"cdef int[:] x")
|
| + memv_node = t.stats[0].base_type
|
| + self.assert_(isinstance(memv_node, MemoryViewSliceTypeNode))
|
| +
|
| + # we also test other similar declarations (buffers, anonymous C arrays)
|
| + # since the parsing has to distinguish between them.
|
| +
|
| + def disable_test_no_buf_arg(self): # TODO
|
| + self.not_parseable(u"Expected ']'",
|
| + u"cdef extern foo(object[int, ndim=2])")
|
| +
|
| + def disable_test_parse_sizeof(self): # TODO
|
| + self.parse(u"sizeof(int[NN])")
|
| + self.parse(u"sizeof(int[])")
|
| + self.parse(u"sizeof(int[][NN])")
|
| + self.not_parseable(u"Expected an identifier or literal",
|
| + u"sizeof(int[:NN])")
|
| + self.not_parseable(u"Expected ']'",
|
| + u"sizeof(foo[dtype=bar]")
|
| +
|
| +if __name__ == '__main__':
|
| + import unittest
|
| + unittest.main()
|
|
|