[pypy-svn] r23867 - pypy/dist/pypy/rpython/test

nik at codespeak.net nik at codespeak.net
Wed Mar 1 23:02:17 CET 2006


Author: nik
Date: Wed Mar  1 23:02:15 2006
New Revision: 23867

Modified:
   pypy/dist/pypy/rpython/test/test_rpbc.py
Log:
(pedronis, nik)
move more rpbc tests over to ootype. had to generalize some tests somewhat
to be independent of the used type system.


Modified: pypy/dist/pypy/rpython/test/test_rpbc.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rpbc.py	(original)
+++ pypy/dist/pypy/rpython/test/test_rpbc.py	Wed Mar  1 23:02:15 2006
@@ -387,103 +387,115 @@
         assert res == 3
 
 
-def test_constant_return_disagreement():
-    class R:
-        def meth(self):
-            return 0
-    r = R()
-    def fn():
-        return r.meth()
-    res = interpret(fn, [])
-    assert res == 0
-
-def test_None_is_false():
-    def fn(i):
-        return bool([None, fn][i])
-    res = interpret(fn, [1])
-    assert res is True
-    res = interpret(fn, [0])
-    assert res is False
-
-def test_classpbc_getattr():
-    class A:
-        myvalue = 123
-    class B(A):
-        myvalue = 456
-    def f(i):
-        return [A,B][i].myvalue
-    res = interpret(f, [0])
-    assert res == 123
-    res = interpret(f, [1])
-    assert res == 456
-
-def test_function_or_None():
-    def g1():
-        return 42
-    def f(i):
-        g = None
-        if i > 5:
-            g = g1
-        if i > 6:
-            return g()
-        else:
-            return 12
-
-    res = interpret(f, [0])
-    assert res == 12
-    res = interpret(f, [6])
-    assert res == 12
-    res = interpret(f, [7])
-    assert res == 42
-
-def test_classdef_getattr():
-    class A:
-        myvalue = 123
-    class B(A):
-        myvalue = 456
-    def f(i):
-        B()    # for A and B to have classdefs
-        return [A,B][i].myvalue
-    res = interpret(f, [0])
-    assert res == 123
-    res = interpret(f, [1])
-    assert res == 456
-
-def test_call_classes():
-    class A: pass
-    class B(A): pass
-    def f(i):
-        if i == 1:
-            cls = B
-        else:
-            cls = A
-        return cls()
-    res = interpret(f, [0])
-    assert res.super.typeptr.name[0] == 'A'
-    res = interpret(f, [1])
-    assert res.super.typeptr.name[0] == 'B'
+    def test_constant_return_disagreement(self):
+        class R:
+            def meth(self):
+                return 0
+        r = R()
+        def fn():
+            return r.meth()
+        res = interpret(fn, [], type_system=self.ts)
+        assert res == 0
+
+    def test_None_is_false(self):
+        def fn(i):
+            if i == 0:
+                v = None
+            else:
+                v = fn
+            return bool(v)
+        res = interpret(fn, [1], type_system=self.ts)
+        assert res is True
+        res = interpret(fn, [0], type_system=self.ts)
+        assert res is False
+
+    def test_classpbc_getattr(self):
+        class A:
+            myvalue = 123
+        class B(A):
+            myvalue = 456
+        def f(i):
+            if i == 0:
+                v = A
+            else:
+                v = B
+            return v.myvalue
+        res = interpret(f, [0], type_system=self.ts)
+        assert res == 123
+        res = interpret(f, [1], type_system=self.ts)
+        assert res == 456
+
+    def test_function_or_None(self):
+        def g1():
+            return 42
+        def f(i):
+            g = None
+            if i > 5:
+                g = g1
+            if i > 6:
+                return g()
+            else:
+                return 12
 
-def test_call_classes_with_init2():
-    class A:
-        def __init__(self, z):
-            self.z = z
-    class B(A):
-        def __init__(self, z, x=42):
-            A.__init__(self, z)
-            self.extra = x
-    def f(i, z):
-        if i == 1:
-            cls = B
-        else:
-            cls = A
-        return cls(z)
-    res = interpret(f, [0, 5])
-    assert res.super.typeptr.name[0] == 'A'
-    assert res.inst_z == 5
-    res = interpret(f, [1, -7645])
-    assert res.super.typeptr.name[0] == 'B'
-    assert res.inst_z == -7645
-    assert res._obj._parentstructure().inst_extra == 42
+        res = interpret(f, [0], type_system=self.ts)
+        assert res == 12
+        res = interpret(f, [6], type_system=self.ts)
+        assert res == 12
+        res = interpret(f, [7], type_system=self.ts)
+        assert res == 42
+
+    def test_classdef_getattr(self):
+        class A:
+            myvalue = 123
+        class B(A):
+            myvalue = 456
+        def f(i):
+            B()    # for A and B to have classdefs
+            if i == 0:
+                v = A
+            else:
+                v = B
+            return v.myvalue
+        res = interpret(f, [0], type_system=self.ts)
+        assert res == 123
+        res = interpret(f, [1], type_system=self.ts)
+        assert res == 456
+
+    def test_call_classes(self):
+        class A: pass
+        class B(A): pass
+        def f(i):
+            if i == 1:
+                cls = B
+            else:
+                cls = A
+            return cls()
+        res = interpret(f, [0], type_system=self.ts)
+        assert self.class_name(res) == 'A'
+        res = interpret(f, [1], type_system=self.ts)
+        assert self.class_name(res) == 'B'
+
+    def test_call_classes_with_init2(self):
+        class A:
+            def __init__(self, z):
+                self.z = z
+        class B(A):
+            def __init__(self, z, x=42):
+                A.__init__(self, z)
+                self.extra = x
+        def f(i, z):
+            if i == 1:
+                cls = B
+            else:
+                cls = A
+            return cls(z)
+        res = interpret(f, [0, 5], type_system=self.ts)
+        assert self.class_name(res) == 'A'
+        assert self.read_attr(res, "z") == 5
+        res = interpret(f, [1, -7645], type_system=self.ts)
+        assert self.class_name(res) == 'B'
+        assert self.read_attr(res, "z") == -7645
+        assert self.read_attr(res, "extra") == 42
 
 def test_call_starargs():
     def g(x=-100, *arg):
@@ -1317,7 +1329,26 @@
 
     ts = "lltype"
 
+    def class_name(self, value):
+        return "".join(value.super.typeptr.name)[:-1]
+
+    def read_attr(self, value, attr_name):
+        value = value._obj
+        while value is not None:
+            attr = getattr(value, "inst_" + attr_name, None)
+            if attr is None:
+                value = value._parentstructure()
+            else:
+                return attr
+        raise AttributeError()
+
 class TestOotype(BaseTestRPBC):
 
     ts = "ootype"
 
+    def class_name(self, value):
+        return typeOf(value)._name 
+
+    def read_attr(self, value, attr):
+        return getattr(value, "o" + attr)
+



More information about the Pypy-commit mailing list