| | 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 TestBufferParsing(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_basic(self): |
| | t = self.parse(u"cdef object[float, 4, ndim=2, foo=foo] x") |
| | bufnode = t.stats[0].base_type |
| | self.assertTrue(isinstance(bufnode, TemplatedTypeNode)) |
| | self.assertEqual(2, len(bufnode.positional_args)) |
| | |
| | |
| |
|
| | def test_type_pos(self): |
| | self.parse(u"cdef object[short unsigned int, 3] x") |
| |
|
| | def test_type_keyword(self): |
| | self.parse(u"cdef object[foo=foo, dtype=short unsigned int] x") |
| |
|
| | def test_pos_after_key(self): |
| | self.not_parseable("Non-keyword arg following keyword arg", |
| | u"cdef object[foo=1, 2] x") |
| |
|
| |
|
| | |
| | |
| | |
| | class TestBufferOptions(CythonTest): |
| | |
| |
|
| | def nonfatal_error(self, error): |
| | |
| | self.error = error |
| | self.assertTrue(self.expect_error) |
| |
|
| | def parse_opts(self, opts, expect_error=False): |
| | assert opts != "" |
| | s = u"def f():\n cdef object[%s] x" % opts |
| | self.expect_error = expect_error |
| | root = self.fragment(s, pipeline=[NormalizeTree(self), PostParse(self)]).root |
| | if not expect_error: |
| | vardef = root.stats[0].body.stats[0] |
| | assert isinstance(vardef, CVarDefNode) |
| | buftype = vardef.base_type |
| | self.assertTrue(isinstance(buftype, TemplatedTypeNode)) |
| | self.assertTrue(isinstance(buftype.base_type_node, CSimpleBaseTypeNode)) |
| | self.assertEqual(u"object", buftype.base_type_node.name) |
| | return buftype |
| | else: |
| | self.assertTrue(len(root.stats[0].body.stats) == 0) |
| |
|
| | def non_parse(self, expected_err, opts): |
| | self.parse_opts(opts, expect_error=True) |
| | |
| | self.assertEqual(expected_err, self.error.message_only) |
| |
|
| | def __test_basic(self): |
| | buf = self.parse_opts(u"unsigned short int, 3") |
| | self.assertTrue(isinstance(buf.dtype_node, CSimpleBaseTypeNode)) |
| | self.assertTrue(buf.dtype_node.signed == 0 and buf.dtype_node.longness == -1) |
| | self.assertEqual(3, buf.ndim) |
| |
|
| | def __test_dict(self): |
| | buf = self.parse_opts(u"ndim=3, dtype=unsigned short int") |
| | self.assertTrue(isinstance(buf.dtype_node, CSimpleBaseTypeNode)) |
| | self.assertTrue(buf.dtype_node.signed == 0 and buf.dtype_node.longness == -1) |
| | self.assertEqual(3, buf.ndim) |
| |
|
| | def __test_ndim(self): |
| | self.parse_opts(u"int, 2") |
| | self.non_parse(ERR_BUF_NDIM, u"int, 'a'") |
| | self.non_parse(ERR_BUF_NDIM, u"int, -34") |
| |
|
| | def __test_use_DEF(self): |
| | t = self.fragment(u""" |
| | DEF ndim = 3 |
| | def f(): |
| | cdef object[int, ndim] x |
| | cdef object[ndim=ndim, dtype=int] y |
| | """, pipeline=[NormalizeTree(self), PostParse(self)]).root |
| | stats = t.stats[0].body.stats |
| | self.assertTrue(stats[0].base_type.ndim == 3) |
| | self.assertTrue(stats[1].base_type.ndim == 3) |
| |
|
| | |
| |
|
| | if __name__ == '__main__': |
| | import unittest |
| | unittest.main() |
| |
|
| |
|