From: Stefan Behnel Date: Sun, 4 Oct 2009 14:42:16 +0000 (+0200) Subject: parse tree test assertions for optimisations on loops and comprehensions X-Git-Tag: 0.12.alpha0~182^2~5 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3a712b6e851b3a64103042fe20088dd27fa12dd1;p=cython.git parse tree test assertions for optimisations on loops and comprehensions --- diff --git a/tests/run/dictcomp.pyx b/tests/run/dictcomp.pyx index f3739e48..b874163e 100644 --- a/tests/run/dictcomp.pyx +++ b/tests/run/dictcomp.pyx @@ -15,11 +15,17 @@ True [(1, 'a'), (2, 'b'), (3, 'c')] """ +cimport cython + def smoketest_dict(): return { x+2:x*2 for x in range(5) if x % 2 == 0 } +@cython.testFailIfPathExists("//ComprehensionNode//ComprehensionAppendNode", + "//SimpleCallNode//ComprehensionNode") +@cython.testAssertPathExists("//ComprehensionNode", + "//ComprehensionNode//DictComprehensionAppendNode") def smoketest_list(): return dict([ (x+2,x*2) for x in range(5) diff --git a/tests/run/enumerate_T316.pyx b/tests/run/enumerate_T316.pyx index ed6c4567..3380ccad 100644 --- a/tests/run/enumerate_T316.pyx +++ b/tests/run/enumerate_T316.pyx @@ -63,20 +63,26 @@ __doc__ = u""" """ +cimport cython + +@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") def go_py_enumerate(): for i,k in enumerate(range(1,5)): print i, k +@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") def go_c_enumerate(): cdef int i,k for i,k in enumerate(range(1,5)): print i, k +@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") def go_c_enumerate_step(): cdef int i,k for i,k in enumerate(range(1,7,2)): print i, k +@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") def py_enumerate_dict(dict d): cdef int i = 55 k = 99 @@ -84,6 +90,7 @@ def py_enumerate_dict(dict d): print i, k print u"::", i, k +@cython.testFailIfPathExists("//SimpleCallNode") def py_enumerate_break(*t): i,k = 55,99 for i,k in enumerate(t): @@ -91,6 +98,7 @@ def py_enumerate_break(*t): break print u"::", i, k +@cython.testFailIfPathExists("//SimpleCallNode") def py_enumerate_return(*t): i,k = 55,99 for i,k in enumerate(t): @@ -98,6 +106,7 @@ def py_enumerate_return(*t): return print u"::", i, k +@cython.testFailIfPathExists("//SimpleCallNode") def py_enumerate_continue(*t): i,k = 55,99 for i,k in enumerate(t): @@ -105,20 +114,24 @@ def py_enumerate_continue(*t): continue print u"::", i, k +@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") def empty_c_enumerate(): cdef int i = 55, k = 99 for i,k in enumerate(range(0)): print i, k return i, k +# not currently optimised def single_target_enumerate(): for t in enumerate(range(1,5)): print t[0], t[1] +@cython.testFailIfPathExists("//SimpleCallNode//NameNode[@name = 'enumerate']") def multi_enumerate(): for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))): print a,b,c,d +@cython.testFailIfPathExists("//SimpleCallNode") def multi_c_enumerate(): cdef int a,b,c,d for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))): diff --git a/tests/run/for_in_range_T372.pyx b/tests/run/for_in_range_T372.pyx index 022aadf3..91c60bf4 100644 --- a/tests/run/for_in_range_T372.pyx +++ b/tests/run/for_in_range_T372.pyx @@ -13,6 +13,10 @@ __doc__ = u""" (2, 0) """ +cimport cython + +@cython.testAssertPathExists("//ForFromStatNode") +@cython.testFailIfPathExists("//ForInStatNode") def test_modify(): cdef int i, n = 5 for i in range(n): @@ -21,6 +25,8 @@ def test_modify(): print return i,n +@cython.testAssertPathExists("//ForFromStatNode") +@cython.testFailIfPathExists("//ForInStatNode") def test_fix(): cdef int i for i in range(5): @@ -28,6 +34,8 @@ def test_fix(): print return i +@cython.testAssertPathExists("//ForFromStatNode") +@cython.testFailIfPathExists("//ForInStatNode") def test_break(): cdef int i, n = 5 for i in range(n): @@ -38,6 +46,8 @@ def test_break(): print return i,n +@cython.testAssertPathExists("//ForFromStatNode") +@cython.testFailIfPathExists("//ForInStatNode") def test_return(): cdef int i, n = 5 for i in range(n): diff --git a/tests/run/setcomp.pyx b/tests/run/setcomp.pyx index 2053fc4e..90668620 100644 --- a/tests/run/setcomp.pyx +++ b/tests/run/setcomp.pyx @@ -17,6 +17,8 @@ True [1, 2, 3] """ +cimport cython + # Py2.3 doesn't have the set type, but Cython does :) _set = set @@ -25,6 +27,9 @@ def smoketest_set(): for x in range(5) if x % 2 == 0 } +@cython.testFailIfPathExists("//SimpleCallNode//ComprehensionNode") +@cython.testAssertPathExists("//ComprehensionNode", + "//ComprehensionNode//ComprehensionAppendNode") def smoketest_list(): return set([ x*2 for x in range(5)