[pypy-svn] r43852 - pypy/dist/pypy/translator/jvm/test

pdg at codespeak.net pdg at codespeak.net
Tue May 29 17:03:37 CEST 2007


Author: pdg
Date: Tue May 29 17:03:36 2007
New Revision: 43852

Added:
   pypy/dist/pypy/translator/jvm/test/test_oo.py
Log:
translator/jvm/test - added test_oo

Added: pypy/dist/pypy/translator/jvm/test/test_oo.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/jvm/test/test_oo.py	Tue May 29 17:03:36 2007
@@ -0,0 +1,125 @@
+from pypy.translator.jvm.test.runtest import JvmTest
+
+class MyClass:
+    INCREMENT = 1
+
+    def __init__(self, x, y):
+        self.x = x
+        self.y = y
+
+    def compute(self):
+        return self.x + self.y
+
+    def compute_and_multiply(self, factor):
+        return self.compute() * factor
+
+    def static_meth(x, y):
+        return x*y
+    static_meth = staticmethod(static_meth)
+
+    def class_attribute(self):
+        return self.x + self.INCREMENT
+
+class MyDerivedClass(MyClass):
+    INCREMENT = 2
+
+    def __init__(self, x, y):
+        MyClass.__init__(self, x+12, y+34)
+
+    def compute(self):
+        return self.x - self.y
+
+
+# helper functions
+def call_method(obj):
+    return obj.compute()
+
+def init_and_compute(cls, x, y):
+    return cls(x, y).compute()
+
+def nonnull_helper(lst):
+    if lst is None:
+        return 1
+    else:
+        return 2
+
+
+class TestOO(JvmTest):
+    def test_indirect_call(self):
+        def f():
+            return 1
+        def g():
+            return 2
+        def fn(flag):
+            if flag:
+                x = f
+            else:
+                x = g
+            return x()
+        assert self.interpret(fn, [True]) == 1
+        assert self.interpret(fn, [False]) == 2
+
+    def test_indirect_call_arguments(self):
+        def f(x):
+            return x+1
+        def g(x):
+            return x+2
+        def fn(flag, n):
+            if flag:
+                x = f
+            else:
+                x = g
+            return x(n)
+        assert self.interpret(fn, [True, 42]) == 43
+
+
+    def test_compute(self):
+        def fn(x, y):
+            obj = MyClass(x, y)
+            return obj.compute()
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+
+    def test_compute_multiply(self):
+        def fn(x, y):
+            obj = MyClass(x, y)
+            return obj.compute_and_multiply(2)
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+        
+    def test_inheritance(self):
+        def fn(x, y):
+            obj = MyDerivedClass(x, y)
+            return obj.compute_and_multiply(2)
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+
+    def test_liskov(self):
+        def fn(x, y):
+            base = MyClass(x, y)
+            derived = MyDerivedClass(x, y)
+            return call_method(base) + call_method(derived)
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+
+    def test_static_method(self):
+        def fn(x, y):
+            base = MyClass(x, y)
+            derived = MyDerivedClass(x, y)
+            return base.static_meth(x,y) + derived.static_meth(x, y)\
+                   + MyClass.static_meth(x, y) + MyDerivedClass.static_meth(x, y)
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+
+    def test_class_attribute(self):
+        def fn(x, y):
+            base = MyClass(x, y)
+            derived = MyDerivedClass(x, y)
+            return base.class_attribute() + derived.class_attribute()
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+
+    def test_runtimenew(self):
+        def fn(x, y):
+            return init_and_compute(MyClass, x, y) + init_and_compute(MyDerivedClass, x, y)
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+
+    def test_nonnull(self):
+        def fn(x, y):
+            return nonnull_helper([]) + nonnull_helper(None)
+        assert self.interpret(fn, [42, 13]) == fn(42, 13)
+



More information about the Pypy-commit mailing list