Issue #5633: Fixed timeit when the statement is a string and the setup is not.

This commit is contained in:
Serhiy Storchaka 2015-05-30 19:38:26 +03:00
parent fa494fd883
commit f28fa66351
3 changed files with 13 additions and 3 deletions

View File

@ -124,6 +124,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)
@ -173,6 +176,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)

View File

@ -65,7 +65,7 @@ default_timer = time.perf_counter
# 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}):
{setup}
_t0 = _timer()
for _i in _it:
@ -119,9 +119,10 @@ class Timer:
stmt = reindent(stmt, 8)
if isinstance(setup, str):
setup = reindent(setup, 4)
src = template.format(stmt=stmt, setup=setup)
src = template.format(stmt=stmt, setup=setup, init='')
elif callable(setup):
src = template.format(stmt=stmt, setup='_setup()')
src = template.format(stmt=stmt, setup='_setup()',
init=', _setup=_setup')
ns['_setup'] = setup
else:
raise ValueError("setup is neither a string nor callable")

View File

@ -60,6 +60,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.