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

nik at codespeak.net nik at codespeak.net
Thu Mar 2 00:25:34 CET 2006


Author: nik
Date: Thu Mar  2 00:25:31 2006
New Revision: 23875

Modified:
   pypy/dist/pypy/rpython/test/test_rpbc.py
Log:
(pedronis, nik)
make more rpbc tests pass with ootype. shuffle around some tests that are not
supposed to pass with ootype for now.


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	Thu Mar  2 00:25:31 2006
@@ -865,28 +865,226 @@
                 return None
         res = interpret(call, [0], type_system=self.ts)
 
-def test_multiple_pbc_with_void_attr():
-    class A:
-        def _freeze_(self):
-            return True
-    a1 = A()
-    a2 = A()
-    unique = A()
-    unique.result = 42
-    a1.value = unique
-    a2.value = unique
-    def g(a):
-        return a.value.result
+    def test_multiple_pbc_with_void_attr(self):
+        class A:
+            def _freeze_(self):
+                return True
+        a1 = A()
+        a2 = A()
+        unique = A()
+        unique.result = 42
+        a1.value = unique
+        a2.value = unique
+        def g(a):
+            return a.value.result
+        def f(i):
+            if i == 1:
+                a = a1
+            else:
+                a = a2
+            return g(a)
+        res = interpret(f, [0], type_system=self.ts)
+        assert res == 42
+        res = interpret(f, [1], type_system=self.ts)
+        assert res == 42
+
+    def test_function_or_none(self):
+        def h(y):
+            return y+84
+        def g(y):
+            return y+42
+        def f(x, y):
+            if x == 1:
+                func = g
+            elif x == 2:
+                func = h
+            else:
+                func = None
+            if func:
+                return func(y)
+            return -1
+        res = interpret(f, [1, 100], type_system=self.ts)
+        assert res == 142
+        res = interpret(f, [2, 100], type_system=self.ts)
+        assert res == 184
+        res = interpret(f, [3, 100], type_system=self.ts)
+        assert res == -1
+
+    def test_pbc_getattr_conversion(self):
+        fr1 = Freezing()
+        fr2 = Freezing()
+        fr3 = Freezing()
+        fr1.value = 10
+        fr2.value = 5
+        fr3.value = 2.5
+        def pick12(i):
+            if i > 0:
+                return fr1
+            else:
+                return fr2
+        def pick23(i):
+            if i > 5:
+                return fr2
+            else:
+                return fr3
+        def f(i):
+            x = pick12(i)
+            y = pick23(i)
+            return x.value, y.value
+        for i in [0, 5, 10]:
+            res = interpret(f, [i], type_system=self.ts)
+            assert type(res.item0) is int   # precise
+            assert type(res.item1) is float
+            assert res.item0 == f(i)[0]
+            assert res.item1 == f(i)[1]
+
+    def test_pbc_getattr_conversion_with_classes(self):
+        class base: pass
+        class fr1(base): pass
+        class fr2(base): pass
+        class fr3(base): pass
+        fr1.value = 10
+        fr2.value = 5
+        fr3.value = 2.5
+        def pick12(i):
+            if i > 0:
+                return fr1
+            else:
+                return fr2
+        def pick23(i):
+            if i > 5:
+                return fr2
+            else:
+                return fr3
+        def f(i):
+            x = pick12(i)
+            y = pick23(i)
+            return x.value, y.value
+        for i in [0, 5, 10]:
+            res = interpret(f, [i], type_system=self.ts)
+            assert type(res.item0) is int   # precise
+            assert type(res.item1) is float
+            assert res.item0 == f(i)[0]
+            assert res.item1 == f(i)[1]
+
+def test_multiple_specialized_functions():
+    def myadder(x, y):   # int,int->int or str,str->str
+        return x+y
+    def myfirst(x, y):   # int,int->int or str,str->str
+        return x
+    def mysecond(x, y):  # int,int->int or str,str->str
+        return y
+    myadder._annspecialcase_ = 'specialize:argtype(0)'
+    myfirst._annspecialcase_ = 'specialize:argtype(0)'
+    mysecond._annspecialcase_ = 'specialize:argtype(0)'
+    def f(i):
+        if i == 0:
+            g = myfirst
+        elif i == 1:
+            g = mysecond
+        else:
+            g = myadder
+        s = g("hel", "lo")
+        n = g(40, 2)
+        return len(s) * n
+    for i in range(3):
+        res = interpret(f, [i])
+        assert res == f(i)
+
+def test_specialized_method_of_frozen():
+    class space:
+        def __init__(self, tag):
+            self.tag = tag
+        def wrap(self, x):
+            if isinstance(x, int):
+                return self.tag + '< %d >' % x
+            else:
+                return self.tag + x
+        wrap._annspecialcase_ = 'specialize:argtype(1)'
+    space1 = space("tag1:")
+    space2 = space("tag2:")
     def f(i):
         if i == 1:
-            a = a1
+            sp = space1
         else:
-            a = a2
-        return g(a)
-    res = interpret(f, [0])
-    assert res == 42
+            sp = space2
+        w1 = sp.wrap('hello')
+        w2 = sp.wrap(42)
+        return w1 + w2
     res = interpret(f, [1])
-    assert res == 42
+    assert ''.join(res.chars) == 'tag1:hellotag1:< 42 >'
+    res = interpret(f, [0])
+    assert ''.join(res.chars) == 'tag2:hellotag2:< 42 >'
+
+def test_call_from_list():
+    def f0(n): return n+200
+    def f1(n): return n+192
+    def f2(n): return n+46
+    def f3(n): return n+2987
+    def f4(n): return n+217
+    lst = [f0, f1, f2, f3, f4]
+    def f(i, n):
+        return lst[i](n)
+    for i in range(5):
+        res = interpret(f, [i, 1000])
+        assert res == f(i, 1000)
+
+def test_precise_method_call_1():
+    class A(object):
+        def meth(self, x=5):
+            return x+1
+    class B(A):
+        def meth(self, x=5):
+            return x+2
+    class C(A):
+        pass
+    def f(i, n):
+        # call both A.meth and B.meth with an explicit argument
+        if i > 0:
+            x = A()
+        else:
+            x = B()
+        result1 = x.meth(n)
+        # now call A.meth only, using the default argument
+        result2 = C().meth()
+        return result1 * result2
+    for i in [0, 1]:
+        res = interpret(f, [i, 1234])
+        assert res == f(i, 1234)
+
+def test_precise_method_call_2():
+    class A(object):
+        def meth(self, x=5):
+            return x+1
+    class B(A):
+        def meth(self, x=5):
+            return x+2
+    class C(A):
+        def meth(self, x=5):
+            return x+3
+    def f(i, n):
+        # call both A.meth and B.meth with an explicit argument
+        if i > 0:
+            x = A()
+        else:
+            x = B()
+        result1 = x.meth(n)
+        # now call A.meth and C.meth, using the default argument
+        if i > 0:
+            x = C()
+        else:
+            x = A()
+        result2 = x.meth()
+        return result1 * result2
+    for i in [0, 1]:
+        res = interpret(f, [i, 1234])
+        assert res == f(i, 1234)
+
+
+# We don't care about the following test_hlinvoke tests working on
+# ootype. Maybe later. This kind of thing is only used in rdict
+# anyway, that will probably have a different kind of implementation
+# in ootype.
 
 def test_hlinvoke_simple():
     def f(a,b):
@@ -975,7 +1173,6 @@
     res = interp.eval_graph(ll_h_graph, [None, r_f.convert_desc(f2desc), 3])
     assert res == 1
 
-
 def test_hlinvoke_hltype():
     class A(object):
         def __init__(self, v):
@@ -1136,194 +1333,6 @@
     res = interp.eval_graph(ll_h_graph, [None, c_f, c_a])
     assert typeOf(res) == A_repr.lowleveltype
 
-def test_function_or_none():
-    def h(y):
-        return y+84
-    def g(y):
-        return y+42
-    def f(x, y):
-        d = {1: g, 2:h}
-        func = d.get(x, None)
-        if func:
-            return func(y)
-        return -1
-    res = interpret(f, [1, 100])
-    assert res == 142
-    res = interpret(f, [2, 100])
-    assert res == 184
-    res = interpret(f, [3, 100])
-    assert res == -1
-
-def test_pbc_getattr_conversion():
-    fr1 = Freezing()
-    fr2 = Freezing()
-    fr3 = Freezing()
-    fr1.value = 10
-    fr2.value = 5
-    fr3.value = 2.5
-    def pick12(i):
-        if i > 0:
-            return fr1
-        else:
-            return fr2
-    def pick23(i):
-        if i > 5:
-            return fr2
-        else:
-            return fr3
-    def f(i):
-        x = pick12(i)
-        y = pick23(i)
-        return x.value, y.value
-    for i in [0, 5, 10]:
-        res = interpret(f, [i])
-        assert type(res.item0) is int   # precise
-        assert type(res.item1) is float
-        assert res.item0 == f(i)[0]
-        assert res.item1 == f(i)[1]
-
-def test_pbc_getattr_conversion_with_classes():
-    class base: pass
-    class fr1(base): pass
-    class fr2(base): pass
-    class fr3(base): pass
-    fr1.value = 10
-    fr2.value = 5
-    fr3.value = 2.5
-    def pick12(i):
-        if i > 0:
-            return fr1
-        else:
-            return fr2
-    def pick23(i):
-        if i > 5:
-            return fr2
-        else:
-            return fr3
-    def f(i):
-        x = pick12(i)
-        y = pick23(i)
-        return x.value, y.value
-    for i in [0, 5, 10]:
-        res = interpret(f, [i])
-        assert type(res.item0) is int   # precise
-        assert type(res.item1) is float
-        assert res.item0 == f(i)[0]
-        assert res.item1 == f(i)[1]
-
-def test_multiple_specialized_functions():
-    def myadder(x, y):   # int,int->int or str,str->str
-        return x+y
-    def myfirst(x, y):   # int,int->int or str,str->str
-        return x
-    def mysecond(x, y):  # int,int->int or str,str->str
-        return y
-    myadder._annspecialcase_ = 'specialize:argtype(0)'
-    myfirst._annspecialcase_ = 'specialize:argtype(0)'
-    mysecond._annspecialcase_ = 'specialize:argtype(0)'
-    def f(i):
-        if i == 0:
-            g = myfirst
-        elif i == 1:
-            g = mysecond
-        else:
-            g = myadder
-        s = g("hel", "lo")
-        n = g(40, 2)
-        return len(s) * n
-    for i in range(3):
-        res = interpret(f, [i])
-        assert res == f(i)
-
-def test_specialized_method_of_frozen():
-    class space:
-        def __init__(self, tag):
-            self.tag = tag
-        def wrap(self, x):
-            if isinstance(x, int):
-                return self.tag + '< %d >' % x
-            else:
-                return self.tag + x
-        wrap._annspecialcase_ = 'specialize:argtype(1)'
-    space1 = space("tag1:")
-    space2 = space("tag2:")
-    def f(i):
-        if i == 1:
-            sp = space1
-        else:
-            sp = space2
-        w1 = sp.wrap('hello')
-        w2 = sp.wrap(42)
-        return w1 + w2
-    res = interpret(f, [1])
-    assert ''.join(res.chars) == 'tag1:hellotag1:< 42 >'
-    res = interpret(f, [0])
-    assert ''.join(res.chars) == 'tag2:hellotag2:< 42 >'
-
-def test_call_from_list():
-    def f0(n): return n+200
-    def f1(n): return n+192
-    def f2(n): return n+46
-    def f3(n): return n+2987
-    def f4(n): return n+217
-    lst = [f0, f1, f2, f3, f4]
-    def f(i, n):
-        return lst[i](n)
-    for i in range(5):
-        res = interpret(f, [i, 1000])
-        assert res == f(i, 1000)
-
-def test_precise_method_call_1():
-    class A(object):
-        def meth(self, x=5):
-            return x+1
-    class B(A):
-        def meth(self, x=5):
-            return x+2
-    class C(A):
-        pass
-    def f(i, n):
-        # call both A.meth and B.meth with an explicit argument
-        if i > 0:
-            x = A()
-        else:
-            x = B()
-        result1 = x.meth(n)
-        # now call A.meth only, using the default argument
-        result2 = C().meth()
-        return result1 * result2
-    for i in [0, 1]:
-        res = interpret(f, [i, 1234])
-        assert res == f(i, 1234)
-
-def test_precise_method_call_2():
-    class A(object):
-        def meth(self, x=5):
-            return x+1
-    class B(A):
-        def meth(self, x=5):
-            return x+2
-    class C(A):
-        def meth(self, x=5):
-            return x+3
-    def f(i, n):
-        # call both A.meth and B.meth with an explicit argument
-        if i > 0:
-            x = A()
-        else:
-            x = B()
-        result1 = x.meth(n)
-        # now call A.meth and C.meth, using the default argument
-        if i > 0:
-            x = C()
-        else:
-            x = A()
-        result2 = x.meth()
-        return result1 * result2
-    for i in [0, 1]:
-        res = interpret(f, [i, 1234])
-        assert res == f(i, 1234)
-
 
 class TestLltype(BaseTestRPBC):
 



More information about the Pypy-commit mailing list