From 41335687c899c8b983e08f1a2fd6d8f84eeab761 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Thu, 12 Aug 2021 19:44:08 +0300 Subject: [PATCH 1/3] bpo-44891: Tests `id` preserving on `* 1` for `str` and `bytes` --- Lib/test/test_bytes.py | 23 +++++++++++++++++++++++ Lib/test/test_unicode.py | 23 +++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 381030fe0e83830..6898f6c66ec47dd 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1169,6 +1169,29 @@ class BufferBlocked(bytearray): 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)) + 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 diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index ffe3e82804ea9c5..71f366bc74500b4 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -508,6 +508,29 @@ def test_replace_id(self): 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)) + 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) From 0982401b0a6d8b10229c7f09b3d7e633976b1b8d Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Thu, 12 Aug 2021 20:22:44 +0300 Subject: [PATCH 2/3] Typo --- Lib/test/test_bytes.py | 1 - Lib/test/test_unicode.py | 1 - 2 files changed, 2 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 6898f6c66ec47dd..13ad238242d0c54 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1185,7 +1185,6 @@ class SubBytes(bytes): s = SubBytes(b'qwerty()') self.assertEqual(id(s), id(s)) - self.assertNotEqual(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)) diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 71f366bc74500b4..a14eead3411f30a 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -524,7 +524,6 @@ class SubStr(str): s = SubStr('qwerty()') self.assertEqual(id(s), id(s)) - self.assertNotEqual(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)) From 26e487ef159822dc4c022b244e274c844a863af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Fri, 13 Aug 2021 12:11:19 +0200 Subject: [PATCH 3/3] Add Blurb --- Misc/NEWS.d/next/Tests/2021-08-13-12-11-06.bpo-44891.T9_mBT.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Tests/2021-08-13-12-11-06.bpo-44891.T9_mBT.rst diff --git a/Misc/NEWS.d/next/Tests/2021-08-13-12-11-06.bpo-44891.T9_mBT.rst b/Misc/NEWS.d/next/Tests/2021-08-13-12-11-06.bpo-44891.T9_mBT.rst new file mode 100644 index 000000000000000..2f83389ec158553 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-08-13-12-11-06.bpo-44891.T9_mBT.rst @@ -0,0 +1,2 @@ +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.