summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_float.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
index ddaf7bd..ff9cfee 100644
--- a/Lib/test/test_float.py
+++ b/Lib/test/test_float.py
@@ -563,6 +563,55 @@ class ReprTestCase(unittest.TestCase):
self.assertEqual(v, eval(repr(v)))
floats_file.close()
+ @unittest.skipUnless(getattr(sys, 'float_repr_style', '') == 'short',
+ "applies only when using short float repr style")
+ def test_short_repr(self):
+ # test short float repr introduced in Python 3.1. One aspect
+ # of this repr is that we get some degree of str -> float ->
+ # str roundtripping. In particular, for any numeric string
+ # containing 15 or fewer significant digits, those exact same
+ # digits (modulo trailing zeros) should appear in the output.
+ # No more repr(0.03) -> "0.029999999999999999"!
+
+ test_strings = [
+ # output always includes *either* a decimal point and at
+ # least one digit after that point, or an exponent.
+ '0.0',
+ '1.0',
+ '0.01',
+ '0.02',
+ '0.03',
+ '0.04',
+ '0.05',
+ '1.23456789',
+ '10.0',
+ '100.0',
+ # values >= 1e16 get an exponent...
+ '1000000000000000.0',
+ '9999999999999990.0',
+ '1e+16',
+ '1e+17',
+ # ... and so do values < 1e-4
+ '0.001',
+ '0.001001',
+ '0.00010000000000001',
+ '0.0001',
+ '9.999999999999e-05',
+ '1e-05',
+ # values designed to provoke failure if the FPU rounding
+ # precision isn't set correctly
+ '8.72293771110361e+25',
+ '7.47005307342313e+26',
+ '2.86438000439698e+28',
+ '8.89142905246179e+28',
+ '3.08578087079232e+35',
+ ]
+
+ for s in test_strings:
+ negs = '-'+s
+ self.assertEqual(s, repr(float(s)))
+ self.assertEqual(negs, repr(float(negs)))
+
@unittest.skipUnless(float.__getformat__("double").startswith("IEEE"),
"test requires IEEE 754 doubles")
class RoundTestCase(unittest.TestCase):