[Python-checkins] r78289 - in python/branches/py3k: Lib/test/test_strtod.py

mark.dickinson python-checkins at python.org
Sun Feb 21 15:49:52 CET 2010


Author: mark.dickinson
Date: Sun Feb 21 15:49:52 2010
New Revision: 78289

Log:
Merged revisions 78287 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78287 | mark.dickinson | 2010-02-21 14:42:27 +0000 (Sun, 21 Feb 2010) | 1 line
  
  Reduce number of random tests in test_strtod, to avoid hogging buildbot time.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/test/test_strtod.py

Modified: python/branches/py3k/Lib/test/test_strtod.py
==============================================================================
--- python/branches/py3k/Lib/test/test_strtod.py	(original)
+++ python/branches/py3k/Lib/test/test_strtod.py	Sun Feb 21 15:49:52 2010
@@ -80,7 +80,7 @@
         hexdigs,
         e + 4*hexdigs)
 
-TEST_SIZE = 16
+TEST_SIZE = 10
 
 class StrtodTests(unittest.TestCase):
     def check_strtod(self, s):
@@ -111,7 +111,7 @@
             lower = -(-2**53//5**k)
             if lower % 2 == 0:
                 lower += 1
-            for i in range(10 * TEST_SIZE):
+            for i in range(TEST_SIZE):
                 # Select a random odd n in [2**53/5**k,
                 # 2**54/5**k). Then n * 10**k gives a halfway case
                 # with small number of significant digits.
@@ -147,34 +147,29 @@
 
     def test_halfway_cases(self):
         # test halfway cases for the round-half-to-even rule
-        for i in range(1000):
-            for j in range(TEST_SIZE):
-                # bit pattern for a random finite positive (or +0.0) float
-                bits = random.randrange(2047*2**52)
-
-                # convert bit pattern to a number of the form m * 2**e
-                e, m = divmod(bits, 2**52)
-                if e:
-                    m, e = m + 2**52, e - 1
-                e -= 1074
-
-                # add 0.5 ulps
-                m, e = 2*m + 1, e - 1
-
-                # convert to a decimal string
-                if e >= 0:
-                    digits = m << e
-                    exponent = 0
-                else:
-                    # m * 2**e = (m * 5**-e) * 10**e
-                    digits = m * 5**-e
-                    exponent = e
-                s = '{}e{}'.format(digits, exponent)
-                self.check_strtod(s)
-
-                # get expected answer via struct, to triple check
-                #fs = struct.unpack('<d', struct.pack('<Q', bits + (bits&1)))[0]
-                #self.assertEqual(fs, float(s))
+        for i in range(100 * TEST_SIZE):
+            # bit pattern for a random finite positive (or +0.0) float
+            bits = random.randrange(2047*2**52)
+
+            # convert bit pattern to a number of the form m * 2**e
+            e, m = divmod(bits, 2**52)
+            if e:
+                m, e = m + 2**52, e - 1
+            e -= 1074
+
+            # add 0.5 ulps
+            m, e = 2*m + 1, e - 1
+
+            # convert to a decimal string
+            if e >= 0:
+                digits = m << e
+                exponent = 0
+            else:
+                # m * 2**e = (m * 5**-e) * 10**e
+                digits = m * 5**-e
+                exponent = e
+            s = '{}e{}'.format(digits, exponent)
+            self.check_strtod(s)
 
     def test_boundaries(self):
         # boundaries expressed as triples (n, e, u), where
@@ -188,11 +183,10 @@
             ]
         for n, e, u in boundaries:
             for j in range(1000):
-                for i in range(TEST_SIZE):
-                    digits = n + random.randrange(-3*u, 3*u)
-                    exponent = e
-                    s = '{}e{}'.format(digits, exponent)
-                    self.check_strtod(s)
+                digits = n + random.randrange(-3*u, 3*u)
+                exponent = e
+                s = '{}e{}'.format(digits, exponent)
+                self.check_strtod(s)
                 n *= 10
                 u *= 10
                 e -= 1
@@ -211,7 +205,7 @@
     def test_bigcomp(self):
         for ndigs in 5, 10, 14, 15, 16, 17, 18, 19, 20, 40, 41, 50:
             dig10 = 10**ndigs
-            for i in range(100 * TEST_SIZE):
+            for i in range(10 * TEST_SIZE):
                 digits = random.randrange(dig10)
                 exponent = random.randrange(-400, 400)
                 s = '{}e{}'.format(digits, exponent)


More information about the Python-checkins mailing list