From 5a547d2d0890dbedfe177a1f32ce4f549e7d215d Mon Sep 17 00:00:00 2001 From: ApostolFet Date: Sat, 29 Mar 2025 22:48:22 +0300 Subject: [PATCH 1/5] test: bytes formatting errors --- Lib/test/test_bytes.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 44486760c08349..4ae074fc1d9950 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -772,8 +772,25 @@ def check(fmt, vals, result): check(b'%i%b %*.*b', (10, b'3', 5, 3, b'abc',), b'103 abc') check(b'%c', b'a', b'a') + class PseudoFloat: + def __init__(self, value): + self.value = float(value) + def __int__(self): + return int(self.value) + + pi = PseudoFloat(3.1415) + + self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14) + self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11) + self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79) + self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi) + self.assertRaisesRegex(TypeError, '%x format: an integer is required, not complex', operator.mod, '%x', 3j) + self.assertRaisesRegex(TypeError, '%X format: an integer is required, not complex', operator.mod, '%X', 2j) + self.assertRaisesRegex(TypeError, '%o format: an integer is required, not complex', operator.mod, '%o', 1j) + self.assertRaisesRegex(TypeError, '%u format: a real number is required, not complex', operator.mod, '%u', 3j) self.assertRaisesRegex(TypeError, '%i format: a real number is required, not complex', operator.mod, '%i', 2j) self.assertRaisesRegex(TypeError, '%d format: a real number is required, not complex', operator.mod, '%d', 2j) + self.assertRaisesRegex(TypeError, r'%c requires an int or a unicode character, not .*\.PseudoFloat', operator.mod, '%c', pi) def test_imod(self): b = self.type2test(b'hello, %b!') From 88710378ee67ddd1e3ca3d8675773b2676c8b81d Mon Sep 17 00:00:00 2001 From: ApostolFet Date: Fri, 4 Apr 2025 20:49:27 +0300 Subject: [PATCH 2/5] test: line length correction --- Lib/test/test_bytes.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 4ae074fc1d9950..fb6d20eac8fe29 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -780,17 +780,24 @@ def __int__(self): pi = PseudoFloat(3.1415) - self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14) - self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11) - self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79) - self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi) - self.assertRaisesRegex(TypeError, '%x format: an integer is required, not complex', operator.mod, '%x', 3j) - self.assertRaisesRegex(TypeError, '%X format: an integer is required, not complex', operator.mod, '%X', 2j) - self.assertRaisesRegex(TypeError, '%o format: an integer is required, not complex', operator.mod, '%o', 1j) - self.assertRaisesRegex(TypeError, '%u format: a real number is required, not complex', operator.mod, '%u', 3j) - self.assertRaisesRegex(TypeError, '%i format: a real number is required, not complex', operator.mod, '%i', 2j) - self.assertRaisesRegex(TypeError, '%d format: a real number is required, not complex', operator.mod, '%d', 2j) - self.assertRaisesRegex(TypeError, r'%c requires an int or a unicode character, not .*\.PseudoFloat', operator.mod, '%c', pi) + mod = operator.mod + exceptions_params = [ + ('%x format: an integer is required, not float', '%x', 3.14), + ('%X format: an integer is required, not float', '%X', 2.11), + ('%o format: an integer is required, not float', '%o', 1.79), + ('%x format: an integer is required, not PseudoFloat', '%x', pi), + ('%x format: an integer is required, not complex', '%x', 3j), + ('%X format: an integer is required, not complex', '%X', 2j), + ('%o format: an integer is required, not complex', '%o', 1j), + ('%u format: a real number is required, not complex', '%u', 3j), + ('%i format: a real number is required, not complex', '%i', 2j), + ('%d format: a real number is required, not complex', '%d', 2j), + (r'%c requires an int or a unicode character, not .*\.PseudoFloat', + '%c', pi), + ] + + for msg, format, value in exceptions_params: + self.assertRaisesRegex(TypeError, msg , mod, format, value) def test_imod(self): b = self.type2test(b'hello, %b!') From 8e57f603e4a5900a2c25ff8f8ed578df95f26d13 Mon Sep 17 00:00:00 2001 From: Ageev Maxim Date: Fri, 4 Apr 2025 21:04:00 +0300 Subject: [PATCH 3/5] Update Lib/test/test_bytes.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- Lib/test/test_bytes.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index fb6d20eac8fe29..18511e4a99db65 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -780,7 +780,6 @@ def __int__(self): pi = PseudoFloat(3.1415) - mod = operator.mod exceptions_params = [ ('%x format: an integer is required, not float', '%x', 3.14), ('%X format: an integer is required, not float', '%X', 2.11), @@ -796,8 +795,8 @@ def __int__(self): '%c', pi), ] - for msg, format, value in exceptions_params: - self.assertRaisesRegex(TypeError, msg , mod, format, value) + for msg, format_str, value in exceptions_params: + self.assertRaisesRegex(TypeError, msg, operator.mod, format_str, value) def test_imod(self): b = self.type2test(b'hello, %b!') From ad6cc23e0f69828f701c9e08ecd1c3da9332a134 Mon Sep 17 00:00:00 2001 From: Ageev Maxim Date: Fri, 4 Apr 2025 21:08:45 +0300 Subject: [PATCH 4/5] Update Lib/test/test_bytes.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> --- Lib/test/test_bytes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 18511e4a99db65..6c17bd345f1124 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -796,7 +796,8 @@ def __int__(self): ] for msg, format_str, value in exceptions_params: - self.assertRaisesRegex(TypeError, msg, operator.mod, format_str, value) + with self.assertRaisesRegex(TypeError, msg): + operator.mod(format_str, value) def test_imod(self): b = self.type2test(b'hello, %b!') From 60288257b59ec88738c1ff4aeb4a7c7b0c85efd8 Mon Sep 17 00:00:00 2001 From: ApostolFet Date: Fri, 4 Apr 2025 21:38:23 +0300 Subject: [PATCH 5/5] test: use bytes format --- Lib/test/test_bytes.py | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 6c17bd345f1124..82d9916e38d341 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -781,23 +781,26 @@ def __int__(self): pi = PseudoFloat(3.1415) exceptions_params = [ - ('%x format: an integer is required, not float', '%x', 3.14), - ('%X format: an integer is required, not float', '%X', 2.11), - ('%o format: an integer is required, not float', '%o', 1.79), - ('%x format: an integer is required, not PseudoFloat', '%x', pi), - ('%x format: an integer is required, not complex', '%x', 3j), - ('%X format: an integer is required, not complex', '%X', 2j), - ('%o format: an integer is required, not complex', '%o', 1j), - ('%u format: a real number is required, not complex', '%u', 3j), - ('%i format: a real number is required, not complex', '%i', 2j), - ('%d format: a real number is required, not complex', '%d', 2j), - (r'%c requires an int or a unicode character, not .*\.PseudoFloat', - '%c', pi), + ('%x format: an integer is required, not float', b'%x', 3.14), + ('%X format: an integer is required, not float', b'%X', 2.11), + ('%o format: an integer is required, not float', b'%o', 1.79), + ('%x format: an integer is required, not PseudoFloat', b'%x', pi), + ('%x format: an integer is required, not complex', b'%x', 3j), + ('%X format: an integer is required, not complex', b'%X', 2j), + ('%o format: an integer is required, not complex', b'%o', 1j), + ('%u format: a real number is required, not complex', b'%u', 3j), + ('%i format: a real number is required, not complex', b'%i', 2j), + ('%d format: a real number is required, not complex', b'%d', 2j), + ( + r'%c requires an integer in range\(256\)' + r' or a single byte, not .*\.PseudoFloat', + b'%c', pi + ), ] - for msg, format_str, value in exceptions_params: + for msg, format_bytes, value in exceptions_params: with self.assertRaisesRegex(TypeError, msg): - operator.mod(format_str, value) + operator.mod(format_bytes, value) def test_imod(self): b = self.type2test(b'hello, %b!')