cpython: 3aba5552b976 (original) (raw)

--- a/Lib/test/test_timeit.py +++ b/Lib/test/test_timeit.py @@ -226,7 +226,7 @@ class TestTimeit(unittest.TestCase): t.print_exc(s) self.assert_exc_string(s.getvalue(), 'ZeroDivisionError')

def run_main(self, seconds_per_increment=1.0, switches=None, timer=None): if timer is None: @@ -252,7 +252,7 @@ class TestTimeit(unittest.TestCase): def test_main_seconds(self): s = self.run_main(seconds_per_increment=5.5)

def test_main_milliseconds(self): s = self.run_main(seconds_per_increment=0.0055) @@ -280,11 +280,11 @@ class TestTimeit(unittest.TestCase): def test_main_fixed_reps(self): s = self.run_main(seconds_per_increment=60.0, switches=['-r9'])

def test_main_negative_reps(self): s = self.run_main(seconds_per_increment=60.0, switches=['-r-5'])

@unittest.skipIf(sys.flags.optimize >= 2, "need doc") def test_main_help(self): @@ -308,14 +308,15 @@ class TestTimeit(unittest.TestCase): def test_main_verbose(self): s = self.run_main(switches=['-v']) self.assertEqual(s, dedent("""[](#l1.38)

def test_main_very_verbose(self): s = self.run_main(seconds_per_increment=0.000050, switches=['-vv']) self.assertEqual(s, dedent("""[](#l1.49)

@@ -328,15 +329,15 @@ class TestTimeit(unittest.TestCase): unit_sec = self.run_main(seconds_per_increment=0.002, switches=['-u', 'sec']) self.assertEqual(unit_sec,

@@ -354,8 +355,8 @@ class TestTimeit(unittest.TestCase): s = self.run_main(switches=['-n1', '1/0']) self.assert_exc_string(error_stringio.getvalue(), 'ZeroDivisionError')

@@ -364,14 +365,20 @@ class TestTimeit(unittest.TestCase): self.assertEqual(num_loops, 1000) self.assertEqual(time_taken, 1.0)

+ def test_autorange_with_callback(self): def callback(a, b): print("{} {:.3f}".format(a, b)) with captured_stdout() as s:

--- a/Lib/timeit.py +++ b/Lib/timeit.py @@ -218,7 +218,7 @@ class Timer: If callback is given and is not None, it will be called after each trial with two arguments: callback(number, time_taken). """

@@ -318,8 +318,10 @@ def main(args=None, *, _wrap_timer=None) callback = None if verbose: def callback(number, time_taken):

@@ -333,7 +335,7 @@ def main(args=None, *, _wrap_timer=None) best = min(r) if verbose: print("raw times:", " ".join(["%.*g" % (precision, x) for x in r]))

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -88,6 +88,11 @@ Core and Builtins Library ------- +- Issue #28240: timeit autorange now uses a single loop iteration if the