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

ac at codespeak.net ac at codespeak.net
Tue Jun 21 18:24:50 CEST 2005


Author: ac
Date: Tue Jun 21 18:24:50 2005
New Revision: 13662

Modified:
   pypy/dist/pypy/rpython/test/test_llinterp.py
   pypy/dist/pypy/rpython/test/test_rstr.py
Log:
Extend the testsuite for rstring.

Modified: pypy/dist/pypy/rpython/test/test_llinterp.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_llinterp.py	(original)
+++ pypy/dist/pypy/rpython/test/test_llinterp.py	Tue Jun 21 18:24:50 2005
@@ -48,6 +48,17 @@
     res = interp.eval_function(func, values)
     return res
 
+def make_interpreter(func, example_values, view=False, viewbefore=False):
+    t, typer = gengraph(func, [lltype_to_annotation(typeOf(x)) for x in example_values],
+                        viewbefore)
+    if view:
+        t.view()
+    interp = LLInterpreter(t.flowgraphs, typer)
+    def evaluate(*values):
+        return interp.eval_function(func, values)
+    
+    return evaluate
+
 #__________________________________________________________________
 # tests
 

Modified: pypy/dist/pypy/rpython/test/test_rstr.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rstr.py	(original)
+++ pypy/dist/pypy/rpython/test/test_rstr.py	Tue Jun 21 18:24:50 2005
@@ -1,64 +1,62 @@
 from pypy.translator.translator import Translator
 from pypy.rpython.lltype import *
 from pypy.rpython.rtyper import RPythonTyper
-from pypy.rpython.test.test_llinterp import interpret
+from pypy.rpython.test.test_llinterp import interpret, make_interpreter
 
 
 def test_simple():
-    def dummyfn(i):
+    def fn(i):
         s = 'hello'
         return s[i]
-
-    t = Translator(dummyfn)
-    t.annotate([int])
-    typer = RPythonTyper(t.annotator)
-    typer.specialize()
-    #t.view()
-    t.checkgraphs()
+    ev_fn = make_interpreter(fn, [0])
+    for i in range(5):
+        res = ev_fn(i)
+        assert res == 'hello'[i]
 
 
 def test_nonzero():
-    def dummyfn(i, s):
+    def fn(i, j):
+        s = ['', 'xx'][j]
         if i < 0:
             s = None
         if i > -2:
             return bool(s)
         else:
             return False
-
-    t = Translator(dummyfn)
-    t.annotate([int, str])
-    typer = RPythonTyper(t.annotator)
-    typer.specialize()
-    #t.view()
-    t.checkgraphs()
+    ev_fn = make_interpreter(fn, [0, 0])
+    for i in [-2, -1, 0]:
+        for j in range(2):
+            res = ev_fn(i, j)
+            assert res is fn(i, j)
 
 def test_hash():
-    def dummyfn(s):
+    def fn(i):
+        if i == 0:
+            s = ''
+        else:
+            s = "xxx"
         return hash(s)
-
-    t = Translator(dummyfn)
-    t.annotate([str])
-    typer = RPythonTyper(t.annotator)
-    typer.specialize()
-    #t.view()
-    t.checkgraphs()
+    ev_fn = make_interpreter(fn, [0])
+    res = ev_fn(0)
+    assert res == -1
+    res = ev_fn(1)
+    assert typeOf(res) == Signed
 
 def test_concat():
-    def dummyfn(s1, s2):
-        return s1 + s2
-
-    t = Translator(dummyfn)
-    t.annotate([str, str])
-    typer = RPythonTyper(t.annotator)
-    typer.specialize()
-    #t.view()
-    t.checkgraphs()
+    def fn(i, j):
+        s1 = ['', 'a', 'ab']
+        s2 = ['', 'x', 'xy']
+        return s1[i] + s2[j]
+    ev_fn = make_interpreter(fn, [0,0])    
+    for i in range(3):
+        for j in range(3):
+            res = ev_fn(i, j)
+            assert ''.join(res.chars) == fn(i, j)
 
 def test_char_constant():
-    def dummyfn(s):
+    def fn(s):
         return s + '.'
-    res = interpret(dummyfn, ['x'])
+    res = interpret(fn, ['x'])
     assert len(res.chars) == 2
     assert res.chars[0] == 'x'
     assert res.chars[1] == '.'
@@ -76,18 +74,20 @@
         s1 = ['one', 'two']
         s2 = ['one', 'two', 'o', 'on', 'twos', 'foobar']
         return s1[i] == s2[j]
+    ev_fn = make_interpreter(fn, [0,0])    
     for i in range(2):
         for j in range(6):
-            res = interpret(fn, [i, j])
+            res = ev_fn(i, j)            
             assert res is fn(i, j)
 
     def fn(i, j):
         s1 = ['one', 'two']
         s2 = ['one', 'two', 'o', 'on', 'twos', 'foobar']
         return s1[i] != s2[j]
+    ev_fn = make_interpreter(fn, [0,0])    
     for i in range(2):
         for j in range(6):
-            res = interpret(fn, [i, j])
+            res = ev_fn(i, j)
             assert res is fn(i, j)
 
 def test_startswith():
@@ -95,9 +95,10 @@
         s1 = ['one', 'two']
         s2 = ['one', 'two', 'o', 'on', 'ne', 'e', 'twos', 'foobar', 'fortytwo']
         return s1[i].startswith(s2[j])
+    ev_fn = make_interpreter(fn, [0,0])    
     for i in range(2):
         for j in range(9):
-            res = interpret(fn, [i, j])
+            res = ev_fn(i, j)
             assert res is fn(i, j)
 
 def test_endswith():
@@ -105,9 +106,10 @@
         s1 = ['one', 'two']
         s2 = ['one', 'two', 'o', 'on', 'ne', 'e', 'twos', 'foobar', 'fortytwo']
         return s1[i].endswith(s2[j])
+    ev_fn = make_interpreter(fn, [0,0])
     for i in range(2):
         for j in range(9):
-            res = interpret(fn, [i, j])
+            res = ev_fn(i, j)
             assert res is fn(i, j)
 
 def test_join():
@@ -118,8 +120,8 @@
         s1 = [ '', ',', ' and ']
         s2 = [ [], ['foo'], ['bar', 'baz', 'bazz']]
         return s1[i].join(s2[j])
-
+    ev_fn = make_interpreter(fn, [0,0])
     for i in range(3):
         for j in range(3):
-            res = interpret(fn, [i, j])
+            res = ev_fn(i, j)
             assert ''.join(res.chars) == fn(i, j)



More information about the Pypy-commit mailing list