]> granicus.if.org Git - python/commitdiff
Issue #24631: Fixed regression in the timeit modulu with multyline setup.
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 15 Jul 2015 19:11:36 +0000 (22:11 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 15 Jul 2015 19:11:36 +0000 (22:11 +0300)
Lib/test/test_timeit.py
Lib/timeit.py
Misc/NEWS

index 5e9d49e670d8132f5a72beffedbc45732742a0b6..2db3c1bed2ade396a2248ecbe3f1826eddfc0011 100644 (file)
@@ -88,8 +88,8 @@ class TestTimeit(unittest.TestCase):
         self.assertRaises(SyntaxError, timeit.Timer, setup='continue')
         self.assertRaises(SyntaxError, timeit.Timer, setup='from timeit import *')
 
-    fake_setup = "import timeittimeit._fake_timer.setup()"
-    fake_stmt = "import timeittimeit._fake_timer.inc()"
+    fake_setup = "import timeit\ntimeit._fake_timer.setup()"
+    fake_stmt = "import timeit\ntimeit._fake_timer.inc()"
 
     def fake_callable_setup(self):
         self.fake_timer.setup()
@@ -272,6 +272,12 @@ class TestTimeit(unittest.TestCase):
         self.assertEqual(s, "CustomSetup\n" * 3 +
                 "35 loops, best of 3: 2 sec per loop\n")
 
+    def test_main_multiple_setups(self):
+        s = self.run_main(seconds_per_increment=2.0,
+                switches=['-n35', '-s', 'a = "CustomSetup"', '-s', 'print(a)'])
+        self.assertEqual(s, "CustomSetup\n" * 3 +
+                "35 loops, best of 3: 2 sec per loop\n")
+
     def test_main_fixed_reps(self):
         s = self.run_main(seconds_per_increment=60.0, switches=['-r9'])
         self.assertEqual(s, "10 loops, best of 9: 60 sec per loop\n")
index d9f9563c2e646eb59acbc6f0c71946c12f5fb4a7..2de88f7271a073c24183466b54c5615424d078b4 100755 (executable)
@@ -109,19 +109,18 @@ class Timer:
         if isinstance(setup, str):
             # Check that the code can be compiled outside a function
             compile(setup, dummy_src_name, "exec")
+            stmtprefix = setup + '\n'
             setup = reindent(setup, 4)
         elif callable(setup):
             local_ns['_setup'] = setup
             init += ', _setup=_setup'
+            stmtprefix = ''
             setup = '_setup()'
         else:
             raise ValueError("setup is neither a string nor callable")
         if isinstance(stmt, str):
             # Check that the code can be compiled outside a function
-            if isinstance(setup, str):
-                compile(setup + '\n' + stmt, dummy_src_name, "exec")
-            else:
-                compile(stmt, dummy_src_name, "exec")
+            compile(stmtprefix + stmt, dummy_src_name, "exec")
             stmt = reindent(stmt, 8)
         elif callable(stmt):
             local_ns['_stmt'] = stmt
index 77c898c5faf37558d23b2c7eed23de63805dc638..bb7e04d7b878645dcc569f60b77d51d22f4df52c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #24631: Fixed regression in the timeit modulu with multyline setup.
+
 - Issue #18622: unittest.mock.mock_open().reset_mock would recurse infinitely.
   Patch from Nicola Palumbo and Laurent De Buyst.