[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