self.assertEqual(bytes(ba), b'ab')
self.assertRaises(TypeError, bytes, bb)
+ def test_repeat_id_preserving(self):
+ a = b'123abc1@'
+ b = b'456zyx-+'
+ self.assertEqual(id(a), id(a))
+ self.assertNotEqual(id(a), id(b))
+ self.assertNotEqual(id(a), id(a * -4))
+ self.assertNotEqual(id(a), id(a * 0))
+ self.assertEqual(id(a), id(a * 1))
+ self.assertEqual(id(a), id(1 * a))
+ self.assertNotEqual(id(a), id(a * 2))
+
+ class SubBytes(bytes):
+ pass
+
+ s = SubBytes(b'qwerty()')
+ self.assertEqual(id(s), id(s))
+ self.assertNotEqual(id(s), id(s * -4))
+ self.assertNotEqual(id(s), id(s * 0))
+ self.assertNotEqual(id(s), id(s * 1))
+ self.assertNotEqual(id(s), id(1 * s))
+ self.assertNotEqual(id(s), id(s * 2))
+
class ByteArrayTest(BaseBytesTest, unittest.TestCase):
type2test = bytearray
text = 'abc def'
self.assertIs(text.replace(pattern, pattern), text)
+ def test_repeat_id_preserving(self):
+ a = '123abc1@'
+ b = '456zyx-+'
+ self.assertEqual(id(a), id(a))
+ self.assertNotEqual(id(a), id(b))
+ self.assertNotEqual(id(a), id(a * -4))
+ self.assertNotEqual(id(a), id(a * 0))
+ self.assertEqual(id(a), id(a * 1))
+ self.assertEqual(id(a), id(1 * a))
+ self.assertNotEqual(id(a), id(a * 2))
+
+ class SubStr(str):
+ pass
+
+ s = SubStr('qwerty()')
+ self.assertEqual(id(s), id(s))
+ self.assertNotEqual(id(s), id(s * -4))
+ self.assertNotEqual(id(s), id(s * 0))
+ self.assertNotEqual(id(s), id(s * 1))
+ self.assertNotEqual(id(s), id(1 * s))
+ self.assertNotEqual(id(s), id(s * 2))
+
def test_bytes_comparison(self):
with warnings_helper.check_warnings():
warnings.simplefilter('ignore', BytesWarning)
--- /dev/null
+Tests were added to clarify :func:`id` is preserved when ``obj * 1`` is used
+on :class:`str` and :class:`bytes` objects. Patch by Nikita Sobolev.