Skip to content

Commit 45a97d9

Browse files
bpo-44891: Tests id preserving on * 1 for str and bytes (GH-27745)
Co-authored-by: Łukasz Langa <[email protected]> (cherry picked from commit a2ce538) Co-authored-by: Nikita Sobolev <[email protected]>
1 parent ebc5926 commit 45a97d9

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

Lib/test/test_bytes.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,28 @@ class BufferBlocked(bytearray):
11691169
self.assertEqual(bytes(ba), b'ab')
11701170
self.assertRaises(TypeError, bytes, bb)
11711171

1172+
def test_repeat_id_preserving(self):
1173+
a = b'123abc1@'
1174+
b = b'456zyx-+'
1175+
self.assertEqual(id(a), id(a))
1176+
self.assertNotEqual(id(a), id(b))
1177+
self.assertNotEqual(id(a), id(a * -4))
1178+
self.assertNotEqual(id(a), id(a * 0))
1179+
self.assertEqual(id(a), id(a * 1))
1180+
self.assertEqual(id(a), id(1 * a))
1181+
self.assertNotEqual(id(a), id(a * 2))
1182+
1183+
class SubBytes(bytes):
1184+
pass
1185+
1186+
s = SubBytes(b'qwerty()')
1187+
self.assertEqual(id(s), id(s))
1188+
self.assertNotEqual(id(s), id(s * -4))
1189+
self.assertNotEqual(id(s), id(s * 0))
1190+
self.assertNotEqual(id(s), id(s * 1))
1191+
self.assertNotEqual(id(s), id(1 * s))
1192+
self.assertNotEqual(id(s), id(s * 2))
1193+
11721194

11731195
class ByteArrayTest(BaseBytesTest, unittest.TestCase):
11741196
type2test = bytearray

Lib/test/test_unicode.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,28 @@ def test_replace_id(self):
508508
text = 'abc def'
509509
self.assertIs(text.replace(pattern, pattern), text)
510510

511+
def test_repeat_id_preserving(self):
512+
a = '123abc1@'
513+
b = '456zyx-+'
514+
self.assertEqual(id(a), id(a))
515+
self.assertNotEqual(id(a), id(b))
516+
self.assertNotEqual(id(a), id(a * -4))
517+
self.assertNotEqual(id(a), id(a * 0))
518+
self.assertEqual(id(a), id(a * 1))
519+
self.assertEqual(id(a), id(1 * a))
520+
self.assertNotEqual(id(a), id(a * 2))
521+
522+
class SubStr(str):
523+
pass
524+
525+
s = SubStr('qwerty()')
526+
self.assertEqual(id(s), id(s))
527+
self.assertNotEqual(id(s), id(s * -4))
528+
self.assertNotEqual(id(s), id(s * 0))
529+
self.assertNotEqual(id(s), id(s * 1))
530+
self.assertNotEqual(id(s), id(1 * s))
531+
self.assertNotEqual(id(s), id(s * 2))
532+
511533
def test_bytes_comparison(self):
512534
with warnings_helper.check_warnings():
513535
warnings.simplefilter('ignore', BytesWarning)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Tests were added to clarify :func:`id` is preserved when ``obj * 1`` is used
2+
on :class:`str` and :class:`bytes` objects. Patch by Nikita Sobolev.

0 commit comments

Comments
 (0)