summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Smith <eric@trueblade.com>2009-12-02 17:43:06 (GMT)
committerEric Smith <eric@trueblade.com>2009-12-02 17:43:06 (GMT)
commitf2bf0d2a51f305f7df9d6199f580b488f1aa5135 (patch)
tree1b98b26ff26a7107eca0b2db167cead745b62b17
parent34398184eb241dcc42ae0ed117c8be6e7a445495 (diff)
downloadcpython-f2bf0d2a51f305f7df9d6199f580b488f1aa5135.zip
cpython-f2bf0d2a51f305f7df9d6199f580b488f1aa5135.tar.gz
cpython-f2bf0d2a51f305f7df9d6199f580b488f1aa5135.tar.bz2
Issue #4482: Add tests for special float value formatting.
-rw-r--r--Lib/test/test_float.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index 3ad1402..564f24f 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -490,6 +490,41 @@ class RoundTestCase(unittest.TestCase):
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):
+ # 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