Skip to content

Commit 7ca45e5

Browse files
authored
gh-94808: improve test coverage of number formatting (#99472)
1 parent f89de67 commit 7ca45e5

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
@@ -1307,6 +1307,20 @@ def __repr__(self):
13071307
self.assertRaises(ValueError, ("{" + big + "}").format)
13081308
self.assertRaises(ValueError, ("{[" + big + "]}").format, [0])
13091309

1310+
# test number formatter errors:
1311+
self.assertRaises(ValueError, '{0:x}'.format, 1j)
1312+
self.assertRaises(ValueError, '{0:x}'.format, 1.0)
1313+
self.assertRaises(ValueError, '{0:X}'.format, 1j)
1314+
self.assertRaises(ValueError, '{0:X}'.format, 1.0)
1315+
self.assertRaises(ValueError, '{0:o}'.format, 1j)
1316+
self.assertRaises(ValueError, '{0:o}'.format, 1.0)
1317+
self.assertRaises(ValueError, '{0:u}'.format, 1j)
1318+
self.assertRaises(ValueError, '{0:u}'.format, 1.0)
1319+
self.assertRaises(ValueError, '{0:i}'.format, 1j)
1320+
self.assertRaises(ValueError, '{0:i}'.format, 1.0)
1321+
self.assertRaises(ValueError, '{0:d}'.format, 1j)
1322+
self.assertRaises(ValueError, '{0:d}'.format, 1.0)
1323+
13101324
# issue 6089
13111325
self.assertRaises(ValueError, "{0[0]x}".format, [None])
13121326
self.assertRaises(ValueError, "{0[0](10)}".format, [None])
@@ -1541,11 +1555,31 @@ def __int__(self):
15411555
self.assertEqual('%X' % letter_m, '6D')
15421556
self.assertEqual('%o' % letter_m, '155')
15431557
self.assertEqual('%c' % letter_m, 'm')
1544-
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14),
1545-
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11),
1546-
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79),
1547-
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi),
1548-
self.assertRaises(TypeError, operator.mod, '%c', pi),
1558+
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not float', operator.mod, '%x', 3.14)
1559+
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not float', operator.mod, '%X', 2.11)
1560+
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not float', operator.mod, '%o', 1.79)
1561+
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not PseudoFloat', operator.mod, '%x', pi)
1562+
self.assertRaisesRegex(TypeError, '%x format: an integer is required, not complex', operator.mod, '%x', 3j)
1563+
self.assertRaisesRegex(TypeError, '%X format: an integer is required, not complex', operator.mod, '%X', 2j)
1564+
self.assertRaisesRegex(TypeError, '%o format: an integer is required, not complex', operator.mod, '%o', 1j)
1565+
self.assertRaisesRegex(TypeError, '%u format: a real number is required, not complex', operator.mod, '%u', 3j)
1566+
self.assertRaisesRegex(TypeError, '%i format: a real number is required, not complex', operator.mod, '%i', 2j)
1567+
self.assertRaisesRegex(TypeError, '%d format: a real number is required, not complex', operator.mod, '%d', 1j)
1568+
self.assertRaisesRegex(TypeError, '%c requires int or char', operator.mod, '%c', pi)
1569+
1570+
class RaisingNumber:
1571+
def __int__(self):
1572+
raise RuntimeError('int') # should not be `TypeError`
1573+
def __index__(self):
1574+
raise RuntimeError('index') # should not be `TypeError`
1575+
1576+
rn = RaisingNumber()
1577+
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%d', rn)
1578+
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%i', rn)
1579+
self.assertRaisesRegex(RuntimeError, 'int', operator.mod, '%u', rn)
1580+
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%x', rn)
1581+
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%X', rn)
1582+
self.assertRaisesRegex(RuntimeError, 'index', operator.mod, '%o', rn)
15491583

15501584
def test_formatting_with_enum(self):
15511585
# issue18780

0 commit comments

Comments
 (0)