[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