[pypy-svn] r14085 - in pypy/dist/pypy/rpython: . test

adim at codespeak.net adim at codespeak.net
Sat Jul 2 13:43:43 CEST 2005


Author: adim
Date: Sat Jul  2 13:43:42 2005
New Revision: 14085

Modified:
   pypy/dist/pypy/rpython/rstr.py
   pypy/dist/pypy/rpython/test/test_rstr.py
Log:
added trivial implementation of string.upper and string.lower (+tests)

Modified: pypy/dist/pypy/rpython/rstr.py
==============================================================================
--- pypy/dist/pypy/rpython/rstr.py	(original)
+++ pypy/dist/pypy/rpython/rstr.py	Sat Jul  2 13:43:42 2005
@@ -104,6 +104,18 @@
         v_str, v_value = hop.inputargs(string_repr, string_repr)
         return hop.gendirectcall(ll_endswith, v_str, v_value)
 
+    def rtype_method_find(_, hop):
+        v_str, v_value = hop.inputargs(string_repr, string_repr)
+        return hop.gendirectcall(ll_find, v_str, v_value)
+
+    def rtype_method_upper(_, hop):
+        v_str, = hop.inputargs(string_repr)
+        return hop.gendirectcall(ll_upper, v_str)
+        
+    def rtype_method_lower(_, hop):
+        v_str, = hop.inputargs(string_repr)
+        return hop.gendirectcall(ll_lower, v_str)
+        
     def rtype_method_join(_, hop):
         r_lst = hop.args_r[1]
         s_item = r_lst.listitem.s_value
@@ -558,6 +570,40 @@
 
 emptystr = string_repr.convert_const("")
 
+def ll_upper(s):
+    s_chars = s.chars
+    s_len = len(s_chars)
+    if s_len == 0:
+        return emptystr
+    i = 0
+    result = malloc(STR, s_len)
+    while i < s_len:
+        ochar = ord(s_chars[i])
+        if ochar >= 97 and ochar <= 122:
+            upperchar = ochar - 32
+        else:
+            upperchar = ochar
+        result.chars[i] = chr(upperchar)
+        i += 1
+    return result
+
+def ll_lower(s):
+    s_chars = s.chars
+    s_len = len(s_chars)
+    if s_len == 0:
+        return emptystr
+    i = 0
+    result = malloc(STR, s_len)
+    while i < s_len:
+        ochar = ord(s_chars[i])
+        if ochar >= 65 and ochar <= 96:
+            lowerchar = ochar + 32
+        else:
+            lowerchar = ochar
+        result.chars[i] = chr(lowerchar)
+        i += 1
+    return result
+
 def ll_join(s, items):
     s_chars = s.chars
     s_len = len(s_chars)

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	Sat Jul  2 13:43:42 2005
@@ -180,6 +180,22 @@
             res = interpret(fn, [i,j])
             assert res is fn(i, j)
 
+def test_upper():
+    def fn(i):
+        strings = ['', ' ', 'upper', 'UpPeR', ',uppEr,']
+        return strings[i].upper()
+    for i in range(5):
+        res = interpret(fn, [i])
+        assert ''.join(res.chars) == fn(i)
+
+def test_lower():
+    def fn(i):
+        strings = ['', ' ', 'lower', 'LoWeR', ',lowEr,']
+        return strings[i].lower()
+    for i in range(5):
+        res = interpret(fn, [i])
+        assert ''.join(res.chars) == fn(i)
+
 def test_join():
     res = interpret(lambda: ''.join([]), [])
     assert ''.join(res.chars) == ""



More information about the Pypy-commit mailing list