Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Unified Diff: third_party/cython/src/Cython/Compiler/Tests/TestBuffer.py

Issue 385073004: Adding cython v0.20.2 in third-party. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reference cython dev list thread. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/cython/src/Cython/Compiler/Tests/TestBuffer.py
diff --git a/third_party/cython/src/Cython/Compiler/Tests/TestBuffer.py b/third_party/cython/src/Cython/Compiler/Tests/TestBuffer.py
new file mode 100644
index 0000000000000000000000000000000000000000..fcb22b72f20c86c2733a6e17cccfea5432201be9
--- /dev/null
+++ b/third_party/cython/src/Cython/Compiler/Tests/TestBuffer.py
@@ -0,0 +1,105 @@
+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):
+ # First, we only test the raw parser, i.e.
+ # the number and contents of arguments are NOT checked.
+ # However "dtype"/the first positional argument is special-cased
+ # to parse a type argument rather than an expression
+
+ 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.assert_(isinstance(bufnode, TemplatedTypeNode))
+ self.assertEqual(2, len(bufnode.positional_args))
+# print bufnode.dump()
+ # should put more here...
+
+ 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")
+
+
+# See also tests/error/e_bufaccess.pyx and tets/run/bufaccess.pyx
+# THESE TESTS ARE NOW DISABLED, the code they test was pretty much
+# refactored away
+class TestBufferOptions(CythonTest):
+ # Tests the full parsing of the options within the brackets
+
+ def nonfatal_error(self, error):
+ # We're passing self as context to transform to trap this
+ self.error = error
+ self.assert_(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) # use normal assert as this is to validate the test code
+ buftype = vardef.base_type
+ self.assert_(isinstance(buftype, TemplatedTypeNode))
+ self.assert_(isinstance(buftype.base_type_node, CSimpleBaseTypeNode))
+ self.assertEqual(u"object", buftype.base_type_node.name)
+ return buftype
+ else:
+ self.assert_(len(root.stats[0].body.stats) == 0)
+
+ def non_parse(self, expected_err, opts):
+ self.parse_opts(opts, expect_error=True)
+# e = self.should_fail(lambda: self.parse_opts(opts))
+ self.assertEqual(expected_err, self.error.message_only)
+
+ def __test_basic(self):
+ buf = self.parse_opts(u"unsigned short int, 3")
+ self.assert_(isinstance(buf.dtype_node, CSimpleBaseTypeNode))
+ self.assert_(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.assert_(isinstance(buf.dtype_node, CSimpleBaseTypeNode))
+ self.assert_(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.assert_(stats[0].base_type.ndim == 3)
+ self.assert_(stats[1].base_type.ndim == 3)
+
+ # add exotic and impossible combinations as they come along...
+
+if __name__ == '__main__':
+ import unittest
+ unittest.main()
+
« no previous file with comments | « third_party/cython/src/Cython/Compiler/Symtab.py ('k') | third_party/cython/src/Cython/Compiler/Tests/TestMemView.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698