@@ -1359,6 +1359,44 @@ def by(s):
1359
1359
b = by ("Hello, world" )
1360
1360
self .assertEqual (re .findall (br"\w+" , b ), [by ("Hello" ), by ("world" )])
1361
1361
1362
+ def test_resize (self ):
1363
+ ba = bytearray (b'abcdef' )
1364
+ self .assertIsNone (ba .resize (3 ))
1365
+ self .assertEqual (ba , bytearray (b'abc' ))
1366
+
1367
+ self .assertIsNone (ba .resize (10 ))
1368
+ self .assertEqual (len (ba ), 10 )
1369
+ # Bytes beyond set values must be cleared.
1370
+ self .assertEqual (ba , bytearray (b'abc\0 \0 \0 \0 \0 \0 \0 ' ))
1371
+
1372
+ ba [3 :10 ] = b'defghij'
1373
+ self .assertEqual (ba , bytearray (b'abcdefghij' ))
1374
+
1375
+ self .assertIsNone (ba .resize (2 ** 20 ))
1376
+ self .assertEqual (len (ba ), 2 ** 20 )
1377
+ self .assertEqual (ba , bytearray (b'abcdefghij' + b'\0 ' * (2 ** 20 - 10 )))
1378
+
1379
+ self .assertIsNone (ba .resize (0 ))
1380
+ self .assertEqual (ba , bytearray ())
1381
+
1382
+ self .assertIsNone (ba .resize (10 ))
1383
+ self .assertEqual (ba , bytearray (b'\0 ' * 10 ))
1384
+
1385
+ # Subclass
1386
+ ba = ByteArraySubclass (b'abcdef' )
1387
+ self .assertIsNone (ba .resize (3 ))
1388
+ self .assertEqual (ba , bytearray (b'abc' ))
1389
+
1390
+ # Check arguments
1391
+ self .assertRaises (TypeError , bytearray ().resize )
1392
+ self .assertRaises (TypeError , bytearray ().resize , (10 , 10 ))
1393
+
1394
+ self .assertRaises (ValueError , bytearray ().resize , - 1 )
1395
+ self .assertRaises (ValueError , bytearray ().resize , - 200 )
1396
+ self .assertRaises (MemoryError , bytearray ().resize , sys .maxsize )
1397
+ self .assertRaises (MemoryError , bytearray (1000 ).resize , sys .maxsize )
1398
+
1399
+
1362
1400
def test_setitem (self ):
1363
1401
def setitem_as_mapping (b , i , val ):
1364
1402
b [i ] = val
@@ -1715,17 +1753,18 @@ def test_resize_forbidden(self):
1715
1753
# if it wouldn't reallocate the underlying buffer.
1716
1754
# Furthermore, no destructive changes to the buffer may be applied
1717
1755
# before raising the error.
1718
- b = bytearray (range ( 10 ) )
1756
+ b = bytearray (10 )
1719
1757
v = memoryview (b )
1720
- def resize (n ):
1758
+ def manual_resize (n ):
1721
1759
b [1 :- 1 ] = range (n + 1 , 2 * n - 1 )
1722
- resize (10 )
1760
+ b . resize (10 )
1723
1761
orig = b [:]
1724
- self .assertRaises (BufferError , resize , 11 )
1762
+ self .assertRaises (BufferError , b .resize , 11 )
1763
+ self .assertRaises (BufferError , manual_resize , 11 )
1725
1764
self .assertEqual (b , orig )
1726
- self .assertRaises (BufferError , resize , 9 )
1765
+ self .assertRaises (BufferError , b . resize , 9 )
1727
1766
self .assertEqual (b , orig )
1728
- self .assertRaises (BufferError , resize , 0 )
1767
+ self .assertRaises (BufferError , b . resize , 0 )
1729
1768
self .assertEqual (b , orig )
1730
1769
# Other operations implying resize
1731
1770
self .assertRaises (BufferError , b .pop , 0 )
0 commit comments