]> granicus.if.org Git - python/commitdiff
Given that ord() of a bytes object of length 1 is defined, it should
authorGuido van Rossum <guido@python.org>
Tue, 8 May 2007 21:05:48 +0000 (21:05 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 8 May 2007 21:05:48 +0000 (21:05 +0000)
never return a negative number.

Lib/test/test_builtin.py
Lib/test/test_bytes.py
Python/bltinmodule.c

index 58cb29ba87d06aca7197ad9d902b391a310f4b87..a11e40aa15bab537a44c5f720a67c82c4a9c5ae0 100644 (file)
@@ -1383,6 +1383,15 @@ class BuiltinTest(unittest.TestCase):
         self.assertEqual(ord(' '), 32)
         self.assertEqual(ord('A'), 65)
         self.assertEqual(ord('a'), 97)
+        self.assertEqual(ord('\x80'), 128)
+        self.assertEqual(ord('\xff'), 255)
+
+        self.assertEqual(ord(b' '), 32)
+        self.assertEqual(ord(b'A'), 65)
+        self.assertEqual(ord(b'a'), 97)
+        self.assertEqual(ord(b'\x80'), 128)
+        self.assertEqual(ord(b'\xff'), 255)
+
         if have_unicode:
             self.assertEqual(ord(chr(sys.maxunicode)), sys.maxunicode)
         self.assertRaises(TypeError, ord, 42)
index ded049100eb2c3efdc160aa16a4b649b7ee54e52..33a4b0d8fe5e9a3afecad8041571dcd58babd83f 100644 (file)
@@ -671,6 +671,11 @@ class BytesTest(unittest.TestCase):
         self.assertEqual(b.rstrip(b'im'), b'mississipp')
         self.assertEqual(b.rstrip(b'pim'), b'mississ')
 
+    def test_ord(self):
+        b = b'\0A\x7f\x80\xff'
+        self.assertEqual([ord(b[i:i+1]) for i in range(len(b))],
+                         [0, 65, 127, 128, 255])
+
     # Optimizations:
     # __iter__? (optimization)
     # __reversed__? (optimization)
index 264470b1c694f7d74b3afbcd365288268b2a8e5c..aa0d0df1a28576527e8120b6aa930a32ee4f33f3 100644 (file)
@@ -1482,7 +1482,7 @@ builtin_ord(PyObject *self, PyObject* obj)
                /* XXX Hopefully this is temporary */
                size = PyBytes_GET_SIZE(obj);
                if (size == 1) {
-                       ord = (long)*PyBytes_AS_STRING(obj);
+                       ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
                        return PyInt_FromLong(ord);
                }
        }