Skip to content

Commit b168b0e

Browse files
miss-islingtonsobolevn
andauthoredDec 24, 2022
gh-94808: improve test coverage of number formatting (GH-99472)
(cherry picked from commit 7ca45e5) Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
1 parent 88fe8d7 commit b168b0e

File tree

1 file changed

+39
-5
lines changed

1 file changed

+39
-5
lines changed
 

‎Lib/test/test_unicode.py

+39-5
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,20 @@ def __repr__(self):
12661266
self.assertRaises(ValueError, ("{" + big + "}").format)
12671267
self.assertRaises(ValueError, ("{[" + big + "]}").format, [0])
12681268

1269+
# test number formatter errors:
1270+
self.assertRaises(ValueError, '{0:x}'.format, 1j)
1271+
self.assertRaises(ValueError, '{0:x}'.format, 1.0)
1272+
self.assertRaises(ValueError, '{0:X}'.format, 1j)
1273+
self.assertRaises(ValueError, '{0:X}'.format, 1.0)
1274+
self.assertRaises(ValueError, '{0:o}'.format, 1j)
1275+
self.assertRaises(ValueError, '{0:o}'.format, 1.0)
1276+
self.assertRaises(ValueError, '{0:u}'.format, 1j)
1277+
self.assertRaises(ValueError, '{0:u}'.format, 1.0)
1278+
self.assertRaises(ValueError, '{0:i}'.format, 1j)
1279+
self.assertRaises(ValueError, '{0:i}'.format, 1.0)
1280+
self.assertRaises(ValueError, '{0:d}'.format, 1j)
1281+
self.assertRaises(ValueError, '{0:d}'.format, 1.0)
1282+
12691283
# issue 6089
12701284
self.assertRaises(ValueError, "{0[0]x}".format, [None])
12711285
self.assertRaises(ValueError, "{0[0](10)}".format, [None])
@@ -1501,11 +1515,31 @@ def __int__(self):
15011515
self.assertEqual('%X' % letter_m, '6D')
15021516
self.assertEqual('%o' % letter_m, '155')
15031517
self.assertEqual('%c' % letter_m, 'm')
1504-
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14),
1505-
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11),
1506-
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79),
1507-
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi),
1508-
self.assertRaises(TypeError, operator.mod, '%c', pi),
1518+
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14)
1519+
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11)
1520+
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79)
1521+
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi)
1522+
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not complex', operator.mod, '%x', 3j)
1523+
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not complex', operator.mod, '%X', 2j)
1524+
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not complex', operator.mod, '%o', 1j)
1525+
self.assertRaisesRegex(TypeError, '%u format: a real number is required, not complex', operator.mod, '%u', 3j)
1526+
self.assertRaisesRegex(TypeError, '%i format: a real number is required, not complex', operator.mod, '%i', 2j)
1527+
self.assertRaisesRegex(TypeError, '%d format: a real number is required, not complex', operator.mod, '%d', 1j)
1528+
self.assertRaisesRegex(TypeError, '%c requires int or char', operator.mod, '%c', pi)
1529+
1530+
class RaisingNumber:
1531+
def __int__(self):
1532+
raise RuntimeError('int') # should not be `TypeError`
1533+
def __index__(self):
1534+
raise RuntimeError('index') # should not be `TypeError`
1535+
1536+
rn = RaisingNumber()
1537+
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%d', rn)
1538+
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%i', rn)
1539+
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%u', rn)
1540+
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%x', rn)
1541+
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%X', rn)
1542+
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%o', rn)
15091543

15101544
def test_formatting_with_enum(self):
15111545
# issue18780

0 commit comments

Comments
 (0)
Please sign in to comment.