[pypy-svn] r9661 - pypy/dist/pypy/translator/test

arigo at codespeak.net arigo at codespeak.net
Sat Mar 5 16:51:51 CET 2005


Author: arigo
Date: Sat Mar  5 16:51:51 2005
New Revision: 9661

Modified:
   pypy/dist/pypy/translator/test/snippet.py
   pypy/dist/pypy/translator/test/test_annrpython.py
Log:
A test to verify that method calls are precise.



Modified: pypy/dist/pypy/translator/test/snippet.py
==============================================================================
--- pypy/dist/pypy/translator/test/snippet.py	(original)
+++ pypy/dist/pypy/translator/test/snippet.py	Sat Mar  5 16:51:51 2005
@@ -465,6 +465,21 @@
     i = MI_D()
     return i.a + i.b + i.c + i.d
 
+class CBase(object):
+    pass
+class CSub1(CBase):
+    def m(self):
+        self.x = 42
+        return self
+class CSub2(CBase):
+    def m(self):
+        self.x = 'world'
+        return self
+
+def methodcall_is_precise():
+    return (CSub1().m(), CSub2().m())
+
+
 def flow_type_info(i):
     if isinstance(i, int):
         a = i + 1

Modified: pypy/dist/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_annrpython.py	(original)
+++ pypy/dist/pypy/translator/test/test_annrpython.py	Sat Mar  5 16:51:51 2005
@@ -558,6 +558,19 @@
         assert s.knowntype == int
         assert not s.is_constant() # !
 
+    def test_methodcall_is_precise(self):
+        a = RPythonAnnotator()
+        s = a.build_types(snippet.methodcall_is_precise, [])
+        classes = a.bookkeeper.userclasses
+        assert s == annmodel.SomeTuple([
+            annmodel.SomeInstance(classes[snippet.CSub1]),
+            annmodel.SomeInstance(classes[snippet.CSub2])])
+        assert 'x' not in classes[snippet.CBase].attrs
+        assert (classes[snippet.CSub1].attrs['x'].s_value ==
+                a.bookkeeper.immutablevalue(42))
+        assert (classes[snippet.CSub2].attrs['x'].s_value ==
+                a.bookkeeper.immutablevalue('world'))
+
 
 def g(n):
     return [0,1,2,n]



More information about the Pypy-commit mailing list