From f9e91c9c58de72afdf51f2a6ebfe50e98beeaa78 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 8 May 2007 21:05:48 +0000 Subject: Given that ord() of a bytes object of length 1 is defined, it should never return a negative number. --- Lib/test/test_builtin.py | 9 +++++++++ Lib/test/test_bytes.py | 5 +++++ Python/bltinmodule.c | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 58cb29b..a11e40a 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -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) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index ded0491..33a4b0d 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -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) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 264470b..aa0d0df 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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); } } -- cgit v0.12