From 59ea508bb84006b8e93ff036aa8d9f0a3fa232c7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 30 May 2015 19:37:19 +0300 Subject: [PATCH] Issue #5633: Fixed timeit when the statement is a string and the setup is not. --- Lib/test/test_timeit.py | 7 +++++++ Lib/timeit.py | 7 ++++--- Misc/NEWS | 2 ++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_timeit.py b/Lib/test/test_timeit.py index a084b68b3f3..3a3359c9699 100644 --- a/Lib/test/test_timeit.py +++ b/Lib/test/test_timeit.py @@ -120,6 +120,9 @@ class TestTimeit(unittest.TestCase): def test_timeit_callable_stmt(self): self.timeit(self.fake_callable_stmt, self.fake_setup, number=3) + def test_timeit_callable_setup(self): + self.timeit(self.fake_stmt, self.fake_callable_setup, number=3) + def test_timeit_callable_stmt_and_setup(self): self.timeit(self.fake_callable_stmt, self.fake_callable_setup, number=3) @@ -169,6 +172,10 @@ class TestTimeit(unittest.TestCase): self.repeat(self.fake_callable_stmt, self.fake_setup, repeat=3, number=5) + def test_repeat_callable_setup(self): + self.repeat(self.fake_stmt, self.fake_callable_setup, + repeat=3, number=5) + def test_repeat_callable_stmt_and_setup(self): self.repeat(self.fake_callable_stmt, self.fake_callable_setup, repeat=3, number=5) diff --git a/Lib/timeit.py b/Lib/timeit.py index a8992f8d771..bf0301e6631 100755 --- a/Lib/timeit.py +++ b/Lib/timeit.py @@ -78,7 +78,7 @@ else: # in Timer.__init__() depend on setup being indented 4 spaces and stmt # being indented 8 spaces. template = """ -def inner(_it, _timer): +def inner(_it, _timer%(init)s): %(setup)s _t0 = _timer() for _i in _it: @@ -132,9 +132,10 @@ class Timer: stmt = reindent(stmt, 8) if isinstance(setup, basestring): setup = reindent(setup, 4) - src = template % {'stmt': stmt, 'setup': setup} + src = template % {'stmt': stmt, 'setup': setup, 'init': ''} elif hasattr(setup, '__call__'): - src = template % {'stmt': stmt, 'setup': '_setup()'} + src = template % {'stmt': stmt, 'setup': '_setup()', + 'init': ', _setup=_setup'} ns['_setup'] = setup else: raise ValueError("setup is neither a string nor callable") diff --git a/Misc/NEWS b/Misc/NEWS index a2a14d6c6df..1fd5f842051 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,8 @@ Core and Builtins Library ------- +- Issue #5633: Fixed timeit when the statement is a string and the setup is not. + - Issue #24326: Fixed audioop.ratecv() with non-default weightB argument. Original patch by David Moore.