Index: Lib/test/test_float.py =================================================================== --- Lib/test/test_float.py (revision 76624) +++ Lib/test/test_float.py (working copy) @@ -490,7 +490,41 @@ self.assertAlmostEqual(round(0.5e22, -22), 1e22) self.assertAlmostEqual(round(1.5e22, -22), 2e22) + @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), + "test requires IEEE 754 doubles") + def test_format_specials(self): + def test(fmt, value, expected): + # Test with both % and format(). + self.assertEqual(fmt % value, expected) + if not '#' in fmt: + # Until issue 7094 is implemented, format() for floats doesn't + # support '#' formatting + fmt = fmt[1:] # strip off the % + self.assertEqual(format(value, fmt), expected, fmt) + # test formatting of nans and infs + for fmt in ['%e', '%f', '%g', '%.0e', '%.6f', '%.20g', + '%#e', '%#f', '%#g', '%#.20e', '%#.15f', '%#.3g']: + pfmt = '%+' + fmt[1:] + sfmt = '% ' + fmt[1:] + test(fmt, INF, 'inf') + test(fmt, -INF, '-inf') + test(fmt, NAN, 'nan') + test(fmt, -NAN, 'nan') + # When asking for a sign, it's always provided. nan's are + # always positive + test(pfmt, INF, '+inf') + test(pfmt, -INF, '-inf') + test(pfmt, NAN, '+nan') + test(pfmt, -NAN, '+nan') + # When using ' ' for a sign code, only inf's can be negative. + # Others have a space. + test(sfmt, INF, ' inf') + test(sfmt, -INF, '-inf') + test(sfmt, NAN, ' nan') + test(sfmt, -NAN, ' nan') + + # Beginning with Python 2.6 float has cross platform compatible # ways to create and represent inf and nan class InfNanTest(unittest.TestCase):