[pypy-svn] r60298 - in pypy/branch/oo-jit/pypy/rpython: lltypesystem ootypesystem test
arigo at codespeak.net
arigo at codespeak.net
Wed Dec 3 17:17:22 CET 2008
Author: arigo
Date: Wed Dec 3 17:17:21 2008
New Revision: 60298
Modified:
pypy/branch/oo-jit/pypy/rpython/lltypesystem/rstr.py
pypy/branch/oo-jit/pypy/rpython/ootypesystem/rstr.py
pypy/branch/oo-jit/pypy/rpython/test/test_rstr.py
Log:
A bug in rstr, for comparing with <=, <, >=, > with one
or both of the elements being a None.
Modified: pypy/branch/oo-jit/pypy/rpython/lltypesystem/rstr.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/lltypesystem/rstr.py (original)
+++ pypy/branch/oo-jit/pypy/rpython/lltypesystem/rstr.py Wed Dec 3 17:17:21 2008
@@ -372,10 +372,13 @@
return result
def ll_strcmp(s1, s2):
- if not s1 and not s2:
- return True
- if not s1 or not s2:
- return False
+ if not s1:
+ if not s2:
+ return 0
+ else:
+ return -1
+ elif not s2:
+ return 1
chars1 = s1.chars
chars2 = s2.chars
len1 = len(chars1)
Modified: pypy/branch/oo-jit/pypy/rpython/ootypesystem/rstr.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/ootypesystem/rstr.py (original)
+++ pypy/branch/oo-jit/pypy/rpython/ootypesystem/rstr.py Wed Dec 3 17:17:21 2008
@@ -138,10 +138,13 @@
return s1.ll_streq(s2)
def ll_strcmp(s1, s2):
- if not s1 and not s2:
- return True
- if not s1 or not s2:
- return False
+ if not s1:
+ if not s2:
+ return 0
+ else:
+ return -1
+ elif not s2:
+ return 1
return s1.ll_strcmp(s2)
def ll_join(s, length_dummy, lst):
Modified: pypy/branch/oo-jit/pypy/rpython/test/test_rstr.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/test/test_rstr.py (original)
+++ pypy/branch/oo-jit/pypy/rpython/test/test_rstr.py Wed Dec 3 17:17:21 2008
@@ -151,58 +151,49 @@
def test_str_compare(self):
const = self.const
+ s1 = [const('one'), const('two'), None]
+ s2 = [const('one'), const('two'), const('o'),
+ const('on'), const('twos'), const('foobar'), None]
+
def fn(i, j):
- s1 = [const('one'), const('two'), None]
- s2 = [const('one'), const('two'), const('o'),
- const('on'), const('twos'), const('foobar'), None]
return s1[i] == s2[j]
- for i in range(3):
- for j in range(7):
+ for i in range(len(s1)):
+ for j in range(len(s2)):
res = self.interpret(fn, [i,j])
assert res is fn(i, j)
def fn(i, j):
- s1 = [const('one'), const('two')]
- s2 = [const('one'), const('two'), const('o'), const('on'), const('twos'), const('foobar')]
return s1[i] != s2[j]
- for i in range(2):
- for j in range(6):
+ for i in range(len(s1)):
+ for j in range(len(s2)):
res = self.interpret(fn, [i, j])
assert res is fn(i, j)
def fn(i, j):
- s1 = [const('one'), const('two')]
- s2 = [const('one'), const('two'), const('o'), const('on'), const('twos'), const('foobar')]
return s1[i] < s2[j]
- for i in range(2):
- for j in range(6):
+ for i in range(len(s1)):
+ for j in range(len(s2)):
res = self.interpret(fn, [i,j])
assert res is fn(i, j)
def fn(i, j):
- s1 = [const('one'), const('two')]
- s2 = [const('one'), const('two'), const('o'), const('on'), const('twos'), const('foobar')]
return s1[i] <= s2[j]
- for i in range(2):
- for j in range(6):
+ for i in range(len(s1)):
+ for j in range(len(s2)):
res = self.interpret(fn, [i,j])
assert res is fn(i, j)
def fn(i, j):
- s1 = [const('one'), const('two')]
- s2 = [const('one'), const('two'), const('o'), const('on'), const('twos'), const('foobar')]
return s1[i] >= s2[j]
- for i in range(2):
- for j in range(6):
+ for i in range(len(s1)):
+ for j in range(len(s2)):
res = self.interpret(fn, [i,j])
assert res is fn(i, j)
def fn(i, j):
- s1 = [const('one'), const('two')]
- s2 = [const('one'), const('two'), const('o'), const('on'), const('twos'), const('foobar')]
return s1[i] > s2[j]
- for i in range(2):
- for j in range(6):
+ for i in range(len(s1)):
+ for j in range(len(s2)):
res = self.interpret(fn, [i,j])
assert res is fn(i, j)
More information about the Pypy-commit
mailing list