mirror of
https://github.com/python/cpython.git
synced 2025-08-29 13:15:11 +00:00
Optimize bytes.fromhex() and bytearray.fromhex()
Issue #25401: Optimize bytes.fromhex() and bytearray.fromhex(): they are now between 2x and 3.5x faster. Changes: * Use a fast-path working on a char* string for ASCII string * Use a slow-path for non-ASCII string * Replace slow hex_digit_to_int() function with a O(1) lookup in _PyLong_DigitValue precomputed table * Use _PyBytesWriter API to handle the buffer * Add unit tests to check the error position in error messages
This commit is contained in:
parent
ebcf9edc05
commit
2bf8993db9
7 changed files with 101 additions and 95 deletions
|
@ -301,6 +301,20 @@ class BaseBytesTest:
|
|||
self.assertRaises(ValueError, self.type2test.fromhex, '\x00')
|
||||
self.assertRaises(ValueError, self.type2test.fromhex, '12 \x00 34')
|
||||
|
||||
for data, pos in (
|
||||
# invalid first hexadecimal character
|
||||
('12 x4 56', 3),
|
||||
# invalid second hexadecimal character
|
||||
('12 3x 56', 4),
|
||||
# two invalid hexadecimal characters
|
||||
('12 xy 56', 3),
|
||||
# test non-ASCII string
|
||||
('12 3\xff 56', 4),
|
||||
):
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
self.type2test.fromhex(data)
|
||||
self.assertIn('at position %s' % pos, str(cm.exception))
|
||||
|
||||
def test_hex(self):
|
||||
self.assertRaises(TypeError, self.type2test.hex)
|
||||
self.assertRaises(TypeError, self.type2test.hex, 1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue