From 8a10ecc051b0932a8386050675862e98db5a5691 Mon Sep 17 00:00:00 2001 From: Eric Smith Date: Wed, 2 Dec 2009 17:58:24 +0000 Subject: [PATCH] Merged revisions 76632 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r76632 | eric.smith | 2009-12-02 12:43:06 -0500 (Wed, 02 Dec 2009) | 1 line Issue #4482: Add tests for special float value formatting. ........ --- Lib/test/test_float.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index ebb666b6d94..0f984a5ca20 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -495,6 +495,41 @@ class RoundTestCase(unittest.TestCase): self.assertEqual(float(format(x, '.3f')), round(x, 3)) + @unittest.skipUnless(float.__getformat__("double").startswith("IEEE"), + "test requires IEEE 754 doubles") + def test_format_specials(self): + # Test formatting of nans and infs. + + def test(fmt, value, expected): + # Test with both % and format(). + self.assertEqual(fmt % value, expected, fmt) + 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) + + 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. nans 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 infs 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