Skip to content

Commit

Permalink
bpo-44891: Tests id preserving on * 1 for str and bytes (pyth…
Browse files Browse the repository at this point in the history
…onGH-27745)

Co-authored-by: Łukasz Langa <[email protected]>
  • Loading branch information
sobolevn and ambv authored Aug 13, 2021
1 parent 7bf28cb commit a2ce538
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
22 changes: 22 additions & 0 deletions Lib/test/test_bytes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,28 @@ 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 * -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
Expand Down
22 changes: 22 additions & 0 deletions Lib/test/test_unicode.py
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,28 @@ 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 * -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit a2ce538

Please sign in to comment.