Author: Manuel Jacob
Branch: 
Changeset: r68934:040c55b8ecee
Date: 2014-01-25 16:08 +0100
http://bitbucket.org/pypy/pypy/changeset/040c55b8ecee/

Log:    Move test functions in test_refcount.py in a class. The LLVM
        subclasses this test class.

diff --git a/rpython/translator/c/test/test_refcount.py 
b/rpython/translator/c/test/test_refcount.py
--- a/rpython/translator/c/test/test_refcount.py
+++ b/rpython/translator/c/test/test_refcount.py
@@ -1,191 +1,189 @@
 import py
-import os
 
+from rpython.rtyper.lltypesystem import lltype
 from rpython.translator.translator import TranslationContext
-from rpython.translator.c import genc
 from rpython.translator.c.test.test_genc import compile
-from rpython.rtyper.lltypesystem import lltype
-from rpython.conftest import option
 
-def compile_func(func, args):
-    return compile(func, args, gcpolicy='ref')
 
-def test_something():
-    def f():
-        return 1
-    fn = compile_func(f, [])
-    assert fn() == 1
+class TestRefcount(object):
+    def compile_func(self, func, args):
+        return compile(func, args, gcpolicy='ref')
 
-def test_something_more():
-    S = lltype.GcStruct("S", ('x', lltype.Signed))
-    def f(x):
-        s = lltype.malloc(S)
-        s.x = x
-        return s.x
-    fn = compile_func(f, [int])
-    assert fn(1) == 1
+    def test_something(self):
+        def f():
+            return 1
+        fn = self.compile_func(f, [])
+        assert fn() == 1
 
-def test_call_function():
-    class C:
-        pass
-    def f():
-        c = C()
-        c.x = 1
-        return c
-    def g():
-        return f().x
-    fn = compile_func(g, [])
-    assert fn() == 1
+    def test_something_more(self):
+        S = lltype.GcStruct("S", ('x', lltype.Signed))
+        def f(x):
+            s = lltype.malloc(S)
+            s.x = x
+            return s.x
+        fn = self.compile_func(f, [int])
+        assert fn(1) == 1
 
-def test_multiple_exits():
-    S = lltype.GcStruct("S", ('x', lltype.Signed))
-    T = lltype.GcStruct("T", ('y', lltype.Signed))
-    def f(n):
-        c = lltype.malloc(S)
-        d = lltype.malloc(T)
-        d.y = 1
-        e = lltype.malloc(T)
-        e.y = 2
-        if n:
-            x = d
-        else:
-            x = e
-        return x.y
-    fn = compile_func(f, [int])
-    assert fn(1) == 1
-    assert fn(0) == 2
+    def test_call_function(self):
+        class C:
+            pass
+        def f():
+            c = C()
+            c.x = 1
+            return c
+        def g():
+            return f().x
+        fn = self.compile_func(g, [])
+        assert fn() == 1
 
+    def test_multiple_exits(self):
+        S = lltype.GcStruct("S", ('x', lltype.Signed))
+        T = lltype.GcStruct("T", ('y', lltype.Signed))
+        def f(n):
+            c = lltype.malloc(S)
+            d = lltype.malloc(T)
+            d.y = 1
+            e = lltype.malloc(T)
+            e.y = 2
+            if n:
+                x = d
+            else:
+                x = e
+            return x.y
+        fn = self.compile_func(f, [int])
+        assert fn(1) == 1
+        assert fn(0) == 2
 
-def test_cleanup_vars_on_call():
-    S = lltype.GcStruct("S", ('x', lltype.Signed))
-    def f():
-        return lltype.malloc(S)
-    def g():
-        s1 = f()
-        s1.x = 42
-        s2 = f()
-        s3 = f()
-        return s1.x
-    fn = compile_func(g, [])
-    assert fn() == 42
 
-def test_multiply_passed_var():
-    S = lltype.GcStruct("S", ('x', lltype.Signed))
-    def f(x):
-        if x:
-            a = lltype.malloc(S)
-            a.x = 1
-            b = a
-        else:
-            a = lltype.malloc(S)
-            a.x = 1
-            b = lltype.malloc(S)
-            b.x = 2
-        return a.x + b.x
-    fn = compile_func(f, [int])
-    fn(1) == 2
-    fn(0) == 3
+    def test_cleanup_vars_on_call(self):
+        S = lltype.GcStruct("S", ('x', lltype.Signed))
+        def f():
+            return lltype.malloc(S)
+        def g():
+            s1 = f()
+            s1.x = 42
+            s2 = f()
+            s3 = f()
+            return s1.x
+        fn = self.compile_func(g, [])
+        assert fn() == 42
 
-def test_write_barrier():
-    S = lltype.GcStruct("S", ('x', lltype.Signed))
-    T = lltype.GcStruct("T", ('s', lltype.Ptr(S)))
-    def f(x):
-        s = lltype.malloc(S)
-        s.x = 0
-        s1 = lltype.malloc(S)
-        s1.x = 1
-        s2 = lltype.malloc(S)
-        s2.x = 2
-        t = lltype.malloc(T)
-        t.s = s
-        if x:
-            t.s = s1
-        else:
-            t.s = s2
-        return t.s.x + s.x + s1.x + s2.x
-    fn = compile_func(f, [int])
-    assert fn(1) == 4
-    assert fn(0) == 5
+    def test_multiply_passed_var(self):
+        S = lltype.GcStruct("S", ('x', lltype.Signed))
+        def f(x):
+            if x:
+                a = lltype.malloc(S)
+                a.x = 1
+                b = a
+            else:
+                a = lltype.malloc(S)
+                a.x = 1
+                b = lltype.malloc(S)
+                b.x = 2
+            return a.x + b.x
+        fn = self.compile_func(f, [int])
+        fn(1) == 2
+        fn(0) == 3
 
-def test_del_basic():
-    py.test.skip("xxx fix or kill")
-    S = lltype.GcStruct('S', ('x', lltype.Signed), rtti=True)
-    TRASH = lltype.GcStruct('TRASH', ('x', lltype.Signed))
-    GLOBAL = lltype.Struct('GLOBAL', ('x', lltype.Signed))
-    glob = lltype.malloc(GLOBAL, immortal=True)
-    def destructor(s):
-        glob.x = s.x + 1
-    def type_info_S(s):
-        return lltype.getRuntimeTypeInfo(S)
+    def test_write_barrier(self):
+        S = lltype.GcStruct("S", ('x', lltype.Signed))
+        T = lltype.GcStruct("T", ('s', lltype.Ptr(S)))
+        def f(x):
+            s = lltype.malloc(S)
+            s.x = 0
+            s1 = lltype.malloc(S)
+            s1.x = 1
+            s2 = lltype.malloc(S)
+            s2.x = 2
+            t = lltype.malloc(T)
+            t.s = s
+            if x:
+                t.s = s1
+            else:
+                t.s = s2
+            return t.s.x + s.x + s1.x + s2.x
+        fn = self.compile_func(f, [int])
+        assert fn(1) == 4
+        assert fn(0) == 5
 
-    def g(n):
-        s = lltype.malloc(S)
-        s.x = n
-        # now 's' should go away
-    def entrypoint(n):
-        g(n)
-        # llop.gc__collect(lltype.Void)
-        return glob.x
+    def test_del_basic(self):
+        py.test.skip("xxx fix or kill")
+        S = lltype.GcStruct('S', ('x', lltype.Signed), rtti=True)
+        TRASH = lltype.GcStruct('TRASH', ('x', lltype.Signed))
+        GLOBAL = lltype.Struct('GLOBAL', ('x', lltype.Signed))
+        glob = lltype.malloc(GLOBAL, immortal=True)
+        def destructor(s):
+            glob.x = s.x + 1
+        def type_info_S(s):
+            return lltype.getRuntimeTypeInfo(S)
 
-    t = TranslationContext()
-    t.buildannotator().build_types(entrypoint, [int])
-    rtyper = t.buildrtyper()
-    destrptr = rtyper.annotate_helper_fn(destructor, [lltype.Ptr(S)])
-    rtyper.attachRuntimeTypeInfoFunc(S, type_info_S, destrptr=destrptr)
-    rtyper.specialize()
-    fn = compile_func(entrypoint, None, t)
+        def g(n):
+            s = lltype.malloc(S)
+            s.x = n
+            # now 's' should go away
+        def entrypoint(n):
+            g(n)
+            # llop.gc__collect(lltype.Void)
+            return glob.x
 
-    res = fn(123)
-    assert res == 124
+        t = TranslationContext()
+        t.buildannotator().build_types(entrypoint, [int])
+        rtyper = t.buildrtyper()
+        destrptr = rtyper.annotate_helper_fn(destructor, [lltype.Ptr(S)])
+        rtyper.attachRuntimeTypeInfoFunc(S, type_info_S, destrptr=destrptr)
+        rtyper.specialize()
+        fn = self.compile_func(entrypoint, None, t)
 
-def test_del_catches():
-    import os
-    def g():
-        pass
-    class A(object):
-        def __del__(self):
-            try:
-                g()
-            except:
-                os.write(1, "hallo")
-    def f1(i):
-        if i:
-            raise TypeError
-    def f(i):
+        res = fn(123)
+        assert res == 124
+
+    def test_del_catches(self):
+        import os
+        def g():
+            pass
+        class A(object):
+            def __del__(self):
+                try:
+                    g()
+                except:
+                    os.write(1, "hallo")
+        def f1(i):
+            if i:
+                raise TypeError
+        def f(i):
+            a = A()
+            f1(i)
+            a.b = 1
+            return a.b
+        fn = self.compile_func(f, [int])
+        assert fn(0) == 1
+        fn(1, expected_exception_name="TypeError")
+
+    def test_del_raises(self):
+        class B(object):
+            def __del__(self):
+                raise TypeError
+        def func():
+            b = B()
+        fn = self.compile_func(func, [])
+        # does not crash
+        fn()
+
+    def test_wrong_order_setitem(self):
+        class A(object):
+            pass
         a = A()
-        f1(i)
-        a.b = 1
-        return a.b
-    fn = compile_func(f, [int])
-    assert fn(0) == 1
-    fn(1, expected_exception_name="TypeError")
-
-def test_del_raises():
-    class B(object):
-        def __del__(self):
-            raise TypeError
-    def func():
-        b = B()
-    fn = compile_func(func, [])
-    # does not crash
-    fn()
-
-def test_wrong_order_setitem():
-    import os
-    class A(object):
-        pass
-    a = A()
-    a.b = None
-    class B(object):
-        def __del__(self):
-            a.freed += 1
-            a.b = None
-    def f(n):
-        a.freed = 0
-        a.b = B()
-        if n:
-            a.b = None
-        return a.freed
-    fn = compile_func(f, [int])
-    res = fn(1)
-    assert res == 1
+        a.b = None
+        class B(object):
+            def __del__(self):
+                a.freed += 1
+                a.b = None
+        def f(n):
+            a.freed = 0
+            a.b = B()
+            if n:
+                a.b = None
+            return a.freed
+        fn = self.compile_func(f, [int])
+        res = fn(1)
+        assert res == 1
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to