[pypy-commit] pypy stmgc-c8: add tests for current and future features

Raemi noreply at buildbot.pypy.org
Fri Nov 27 06:32:37 EST 2015


Author: Remi Meier <remi.meier at gmail.com>
Branch: stmgc-c8
Changeset: r80995:5db87b548f92
Date: 2015-11-27 11:24 +0100
http://bitbucket.org/pypy/pypy/changeset/5db87b548f92/

Log:	add tests for current and future features

diff --git a/rpython/translator/stm/test/test_inevitable.py b/rpython/translator/stm/test/test_inevitable.py
--- a/rpython/translator/stm/test/test_inevitable.py
+++ b/rpython/translator/stm/test/test_inevitable.py
@@ -401,6 +401,21 @@
         res = self.interpret_inevitable(f1, [1])
         assert res == ['getfield']
 
+    def test_partially_redundant_inev3(self):
+        X = lltype.Struct('X', ('foo', lltype.Signed))
+        x1 = lltype.malloc(X, immortal=True)
+        x1.foo = 42
+
+        def f1(i):
+            r = 0
+            if i:
+                r += x1.foo
+            r += x1.foo
+            return r
+
+        res = self.interpret_inevitable(f1, [1])
+        assert res == ['getfield', 'getfield']
+
     def test_with_break_inev(self):
         X = lltype.Struct('X', ('foo', lltype.Signed))
         x1 = lltype.malloc(X, immortal=True)
@@ -425,8 +440,8 @@
 
         def f1(i):
             x1 = lltype.malloc(X, flavor='raw')
-            x1.foo = 42
-            r = x1.foo
+            x1.foo = 42 # ok
+            r = x1.foo # ok
             lltype.free(x1, flavor='raw')
             return r
 
@@ -434,20 +449,56 @@
         assert res == []
 
 
-    def test_for_unknown_raw(self):
+    def test_for_local_raw_with_break(self):
+        py.test.skip("not yet")
+        X = lltype.Struct('X', ('foo', lltype.Signed))
+        import time
+        def f1(i):
+            x1 = lltype.malloc(X, flavor='raw')
+            x1.foo = 42 # ok
+            time.sleep(0) # gil rel
+            r = x1.foo # inev
+            x1.foo = 8 # ok
+            if i:
+                lltype.free(x1, flavor='raw')
+            return r
+
+        res = self.interpret_inevitable(f1, [1])
+        assert res == ['getfield',]
+
+    def test_for_local_raw_no_free(self):
         py.test.skip("not yet")
         X = lltype.Struct('X', ('foo', lltype.Signed))
 
         def f1(i):
             x1 = lltype.malloc(X, flavor='raw')
-            x1.foo = 42
-            r = x1.foo
+            x1.foo = 42 # ok
+            r = x1.foo # ok
             if i:
                 lltype.free(x1, flavor='raw')
             return r
 
         res = self.interpret_inevitable(f1, [1])
-        assert res == ['setfield', 'getfield']
+        assert res == []
+
+
+    def test_for_unknown_raw(self):
+        py.test.skip("not yet")
+        X = lltype.Struct('X', ('foo', lltype.Signed))
+
+        def g(r):
+            r.foo = 28 # inev bc. unknown
+        def f1(i):
+            x1 = lltype.malloc(X, flavor='raw')
+            x1.foo = 42 # ok
+            if i:
+                g(x1) # no break
+            r = x1.foo # ok
+            lltype.free(x1, flavor='raw')
+            return r
+
+        res = self.interpret_inevitable(f1, [1])
+        assert res == ['setfield']
 
 
     def test_local_raw_in_same_transaction(self):


More information about the pypy-commit mailing list