Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions Lib/test/test_bytes.py
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,8 @@ def test_concat(self):
self.assertRaises(TypeError, lambda: b1 + "def")
self.assertRaises(TypeError, lambda: "abc" + b2)

self.assertEqual(self.type2test() + memoryview(b''), b'')

def test_repeat(self):
for b in b"abc", self.type2test(b"abc"):
self.assertEqual(b * 3, b"abcabcabc")
Expand Down Expand Up @@ -1438,6 +1440,25 @@ class SubBytes(bytes):
self.assertNotEqual(id(s), id(1 * s))
self.assertNotEqual(id(s), id(s * 2))

@support.cpython_only
def test_concat_cpython(self):
# Test optimizations
empty = b''
s = b"abc"
self.assertIs(s + empty, s)
self.assertIs(empty + s, s)

self.assertIs(empty + bytearray(b''), empty)
self.assertIs(empty + memoryview(b''), empty)

@support.cpython_only
def test_repeat_cpython(self):
# Test optimizations
for b in b'', b'x', b"abc":
self.assertIs(b * 1, b)
self.assertIs(b * 0, b'')
self.assertIs(b * -23, b'')


class ByteArrayTest(BaseBytesTest, unittest.TestCase):
type2test = bytearray
Expand Down
15 changes: 10 additions & 5 deletions Lib/test/test_capi/test_bytes.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,12 @@ def test_fromstringandsize(self):
self.assertEqual(fromstringandsize(b'abc'), b'abc')
self.assertEqual(fromstringandsize(b'abc', 2), b'ab')
self.assertEqual(fromstringandsize(b'abc\0def'), b'abc\0def')
self.assertEqual(fromstringandsize(b'a'), b'a')
self.assertEqual(fromstringandsize(b'a', 1), b'a')
self.assertEqual(fromstringandsize(b'', 0), b'')
self.assertEqual(fromstringandsize(NULL, 0), b'')

# Return singleton for 0 or 1 bytes
self.assertIs(fromstringandsize(b'', 0), b'')
self.assertIs(fromstringandsize(NULL, 0), b'')
self.assertIs(fromstringandsize(b'a', 1), b'a')

self.assertEqual(len(fromstringandsize(NULL, 3)), 3)
self.assertRaises((MemoryError, OverflowError),
fromstringandsize, NULL, PY_SSIZE_T_MAX)
Expand All @@ -79,7 +81,10 @@ def test_fromstring(self):
fromstring = _testlimitedcapi.bytes_fromstring

self.assertEqual(fromstring(b'abc\0def'), b'abc')
self.assertEqual(fromstring(b''), b'')

# Return singleton for 0 or 1 bytes
self.assertIs(fromstring(b''), b'')
self.assertIs(fromstring(b'a'), b'a')

# CRASHES fromstring(NULL)

Expand Down
4 changes: 3 additions & 1 deletion Lib/test/test_tracemalloc.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ def get_frames(nframe, lineno_delta):
def allocate_bytes(size):
nframe = tracemalloc.get_traceback_limit()
bytes_len = (size - EMPTY_STRING_SIZE)
if bytes_len < 0:
raise ValueError(f"{size} bytes is too small")
frames = get_frames(nframe, 1)
data = b'x' * bytes_len
return data, tracemalloc.Traceback(frames, min(len(frames), nframe))
Expand Down Expand Up @@ -158,7 +160,7 @@ def test_new_reference(self):
self.assertEqual(traceback, obj_traceback)

def test_set_traceback_limit(self):
obj_size = 10
obj_size = 123

tracemalloc.stop()
self.assertRaises(ValueError, tracemalloc.start, -1)
Expand Down
Loading
Loading