[Python-3000-checkins] r54720 - in python/branches/p3yk: Lib/test/test_bytes.py Objects/bytesobject.c
guido.van.rossum
python-3000-checkins at python.org
Mon Apr 9 02:49:14 CEST 2007
Author: guido.van.rossum
Date: Mon Apr 9 02:49:13 2007
New Revision: 54720
Modified:
python/branches/p3yk/Lib/test/test_bytes.py
python/branches/p3yk/Objects/bytesobject.c
Log:
Bytes should never equal unicode.
Add tests for str <cmpop> bytes.
Modified: python/branches/p3yk/Lib/test/test_bytes.py
==============================================================================
--- python/branches/p3yk/Lib/test/test_bytes.py (original)
+++ python/branches/p3yk/Lib/test/test_bytes.py Mon Apr 9 02:49:13 2007
@@ -114,6 +114,27 @@
self.assertEqual(b"abc" < "ab", False)
self.assertEqual(b"abc" <= "ab", False)
+ self.assertEqual("abc" == b"abc", True)
+ self.assertEqual("ab" != b"abc", True)
+ self.assertEqual("ab" <= b"abc", True)
+ self.assertEqual("ab" < b"abc", True)
+ self.assertEqual("abc" >= b"ab", True)
+ self.assertEqual("abc" > b"ab", True)
+
+ self.assertEqual("abc" != b"abc", False)
+ self.assertEqual("ab" == b"abc", False)
+ self.assertEqual("ab" > b"abc", False)
+ self.assertEqual("ab" >= b"abc", False)
+ self.assertEqual("abc" < b"ab", False)
+ self.assertEqual("abc" <= b"ab", False)
+
+ # But they should never compare equal to Unicode!
+ # Test this for all expected byte orders and Unicode character sizes
+ self.assertEqual(b"\0a\0b\0c" == u"abc", False)
+ self.assertEqual(b"\0\0\0a\0\0\0b\0\0\0c" == u"abc", False)
+ self.assertEqual(b"a\0b\0c\0" == u"abc", False)
+ self.assertEqual(b"a\0\0\0b\0\0\0c\0\0\0" == u"abc", False)
+
def test_nohash(self):
self.assertRaises(TypeError, hash, bytes())
Modified: python/branches/p3yk/Objects/bytesobject.c
==============================================================================
--- python/branches/p3yk/Objects/bytesobject.c (original)
+++ python/branches/p3yk/Objects/bytesobject.c Mon Apr 9 02:49:13 2007
@@ -848,7 +848,12 @@
int cmp;
/* For backwards compatibility, bytes can be compared to anything that
- supports the (binary) buffer API. */
+ supports the (binary) buffer API. Except Unicode. */
+
+ if (PyUnicode_Check(self) || PyUnicode_Check(other)) {
+ Py_INCREF(Py_NotImplemented);
+ return Py_NotImplemented;
+ }
self_buffer = self->ob_type->tp_as_buffer;
if (self_buffer == NULL ||
More information about the Python-3000-checkins
mailing list