]> granicus.if.org Git - python/commitdiff
Merged revisions 76632 via svnmerge from
authorEric Smith <eric@trueblade.com>
Wed, 2 Dec 2009 17:58:24 +0000 (17:58 +0000)
committerEric Smith <eric@trueblade.com>
Wed, 2 Dec 2009 17:58:24 +0000 (17:58 +0000)
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

index ebb666b6d9473621153a310363688c3310e09597..0f984a5ca20c999009a2da6dda84ed00b923fda7 100644 (file)
@@ -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