test case for ticket #600: scope of iterable in genexprs
authorStefan Behnel <scoder@users.berlios.de>
Thu, 25 Nov 2010 18:05:40 +0000 (19:05 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Thu, 25 Nov 2010 18:05:40 +0000 (19:05 +0100)
tests/bugs.txt
tests/run/genexpr_iterable_lookup_T600.pyx [new file with mode: 0644]

index 32dee7355a2d7f84703afa2fb1a4855f808390d0..48211a703a604979df5ffe1f39f0ac958cc4cc72 100644 (file)
@@ -18,6 +18,7 @@ closure_inside_cdef_T554
 ipow_crash_T562
 pure_mode_cmethod_inheritance_T583
 list_comp_in_closure_T598
+genexpr_iterable_lookup_T600
 
 # CPython regression tests that don't current work:
 pyregr.test_threadsignals
diff --git a/tests/run/genexpr_iterable_lookup_T600.pyx b/tests/run/genexpr_iterable_lookup_T600.pyx
new file mode 100644 (file)
index 0000000..37d6c9f
--- /dev/null
@@ -0,0 +1,18 @@
+
+cimport cython
+
+@cython.test_assert_path_exists('//ComprehensionNode')
+@cython.test_fail_if_path_exists('//SimpleCallNode')
+def list_genexpr_iterable_lookup():
+    """
+    >>> x = (0,1,2,3,4,5)
+    >>> [ x*2 for x in x if x % 2 == 0 ]  # leaks in Py2 but finds the right 'x'
+    [0, 4, 8]
+
+    >>> list_genexpr_iterable_lookup()
+    [0, 4, 8]
+    """
+    x = (0,1,2,3,4,5)
+    result = list( x*2 for x in x if x % 2 == 0 )
+    assert x == (0,1,2,3,4,5)
+    return result