Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_timeit.py @ 78069:a8aa77458e12 3.2
Add c_size_t and c_ssize_t to the ctypes summary table.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 12 Jul 2012 20:31:50 +0200 |
| parents | 628a3679dc14 |
| children | 182884b460bf |
| rev | line source |
|---|---|
|
68623
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
1 import timeit |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
2 import unittest |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
3 import sys |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
4 import io |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
5 import time |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
6 from textwrap import dedent |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
7 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
8 from test.support import run_unittest |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
9 from test.support import captured_stdout |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
10 from test.support import captured_stderr |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
11 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
12 # timeit's default number of iterations. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
13 DEFAULT_NUMBER = 1000000 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
14 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
15 # timeit's default number of repetitions. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
16 DEFAULT_REPEAT = 3 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
17 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
18 # XXX: some tests are commented out that would improve the coverage but take a |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
19 # long time to run because they test the default number of loops, which is |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
20 # large. The tests could be enabled if there was a way to override the default |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
21 # number of loops during testing, but this would require changing the signature |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
22 # of some functions that use the default as a default argument. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
23 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
24 class FakeTimer: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
25 BASE_TIME = 42.0 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
26 def __init__(self, seconds_per_increment=1.0): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
27 self.count = 0 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
28 self.setup_calls = 0 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
29 self.seconds_per_increment=seconds_per_increment |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
30 timeit._fake_timer = self |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
31 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
32 def __call__(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
33 return self.BASE_TIME + self.count * self.seconds_per_increment |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
34 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
35 def inc(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
36 self.count += 1 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
37 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
38 def setup(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
39 self.setup_calls += 1 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
40 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
41 def wrap_timer(self, timer): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
42 """Records 'timer' and returns self as callable timer.""" |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
43 self.saved_timer = timer |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
44 return self |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
45 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
46 class TestTimeit(unittest.TestCase): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
47 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
48 def tearDown(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
49 try: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
50 del timeit._fake_timer |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
51 except AttributeError: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
52 pass |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
53 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
54 def test_reindent_empty(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
55 self.assertEqual(timeit.reindent("", 0), "") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
56 self.assertEqual(timeit.reindent("", 4), "") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
57 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
58 def test_reindent_single(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
59 self.assertEqual(timeit.reindent("pass", 0), "pass") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
60 self.assertEqual(timeit.reindent("pass", 4), "pass") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
61 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
62 def test_reindent_multi_empty(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
63 self.assertEqual(timeit.reindent("\n\n", 0), "\n\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
64 self.assertEqual(timeit.reindent("\n\n", 4), "\n \n ") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
65 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
66 def test_reindent_multi(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
67 self.assertEqual(timeit.reindent( |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
68 "print()\npass\nbreak", 0), |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
69 "print()\npass\nbreak") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
70 self.assertEqual(timeit.reindent( |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
71 "print()\npass\nbreak", 4), |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
72 "print()\n pass\n break") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
73 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
74 def test_timer_invalid_stmt(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
75 self.assertRaises(ValueError, timeit.Timer, stmt=None) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
76 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
77 def test_timer_invalid_setup(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
78 self.assertRaises(ValueError, timeit.Timer, setup=None) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
79 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
80 fake_setup = "import timeit; timeit._fake_timer.setup()" |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
81 fake_stmt = "import timeit; timeit._fake_timer.inc()" |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
82 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
83 def fake_callable_setup(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
84 self.fake_timer.setup() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
85 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
86 def fake_callable_stmt(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
87 self.fake_timer.inc() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
88 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
89 def timeit(self, stmt, setup, number=None): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
90 self.fake_timer = FakeTimer() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
91 t = timeit.Timer(stmt=stmt, setup=setup, timer=self.fake_timer) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
92 kwargs = {} |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
93 if number is None: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
94 number = DEFAULT_NUMBER |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
95 else: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
96 kwargs['number'] = number |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
97 delta_time = t.timeit(**kwargs) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
98 self.assertEqual(self.fake_timer.setup_calls, 1) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
99 self.assertEqual(self.fake_timer.count, number) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
100 self.assertEqual(delta_time, number) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
101 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
102 # Takes too long to run in debug build. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
103 #def test_timeit_default_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
104 # self.timeit(self.fake_stmt, self.fake_setup) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
105 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
106 def test_timeit_zero_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
107 self.timeit(self.fake_stmt, self.fake_setup, number=0) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
108 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
109 def test_timeit_few_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
110 self.timeit(self.fake_stmt, self.fake_setup, number=3) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
111 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
112 def test_timeit_callable_stmt(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
113 self.timeit(self.fake_callable_stmt, self.fake_setup, number=3) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
114 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
115 def test_timeit_callable_stmt_and_setup(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
116 self.timeit(self.fake_callable_stmt, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
117 self.fake_callable_setup, number=3) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
118 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
119 # Takes too long to run in debug build. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
120 #def test_timeit_function(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
121 # delta_time = timeit.timeit(self.fake_stmt, self.fake_setup, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
122 # timer=FakeTimer()) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
123 # self.assertEqual(delta_time, DEFAULT_NUMBER) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
124 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
125 def test_timeit_function_zero_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
126 delta_time = timeit.timeit(self.fake_stmt, self.fake_setup, number=0, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
127 timer=FakeTimer()) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
128 self.assertEqual(delta_time, 0) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
129 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
130 def repeat(self, stmt, setup, repeat=None, number=None): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
131 self.fake_timer = FakeTimer() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
132 t = timeit.Timer(stmt=stmt, setup=setup, timer=self.fake_timer) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
133 kwargs = {} |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
134 if repeat is None: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
135 repeat = DEFAULT_REPEAT |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
136 else: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
137 kwargs['repeat'] = repeat |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
138 if number is None: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
139 number = DEFAULT_NUMBER |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
140 else: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
141 kwargs['number'] = number |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
142 delta_times = t.repeat(**kwargs) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
143 self.assertEqual(self.fake_timer.setup_calls, repeat) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
144 self.assertEqual(self.fake_timer.count, repeat * number) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
145 self.assertEqual(delta_times, repeat * [float(number)]) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
146 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
147 # Takes too long to run in debug build. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
148 #def test_repeat_default(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
149 # self.repeat(self.fake_stmt, self.fake_setup) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
150 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
151 def test_repeat_zero_reps(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
152 self.repeat(self.fake_stmt, self.fake_setup, repeat=0) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
153 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
154 def test_repeat_zero_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
155 self.repeat(self.fake_stmt, self.fake_setup, number=0) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
156 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
157 def test_repeat_few_reps_and_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
158 self.repeat(self.fake_stmt, self.fake_setup, repeat=3, number=5) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
159 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
160 def test_repeat_callable_stmt(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
161 self.repeat(self.fake_callable_stmt, self.fake_setup, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
162 repeat=3, number=5) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
163 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
164 def test_repeat_callable_stmt_and_setup(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
165 self.repeat(self.fake_callable_stmt, self.fake_callable_setup, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
166 repeat=3, number=5) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
167 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
168 # Takes too long to run in debug build. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
169 #def test_repeat_function(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
170 # delta_times = timeit.repeat(self.fake_stmt, self.fake_setup, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
171 # timer=FakeTimer()) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
172 # self.assertEqual(delta_times, DEFAULT_REPEAT * [float(DEFAULT_NUMBER)]) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
173 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
174 def test_repeat_function_zero_reps(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
175 delta_times = timeit.repeat(self.fake_stmt, self.fake_setup, repeat=0, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
176 timer=FakeTimer()) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
177 self.assertEqual(delta_times, []) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
178 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
179 def test_repeat_function_zero_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
180 delta_times = timeit.repeat(self.fake_stmt, self.fake_setup, number=0, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
181 timer=FakeTimer()) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
182 self.assertEqual(delta_times, DEFAULT_REPEAT * [0.0]) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
183 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
184 def assert_exc_string(self, exc_string, expected_exc_name): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
185 exc_lines = exc_string.splitlines() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
186 self.assertGreater(len(exc_lines), 2) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
187 self.assertTrue(exc_lines[0].startswith('Traceback')) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
188 self.assertTrue(exc_lines[-1].startswith(expected_exc_name)) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
189 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
190 def test_print_exc(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
191 s = io.StringIO() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
192 t = timeit.Timer("1/0") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
193 try: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
194 t.timeit() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
195 except: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
196 t.print_exc(s) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
197 self.assert_exc_string(s.getvalue(), 'ZeroDivisionError') |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
198 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
199 MAIN_DEFAULT_OUTPUT = "10 loops, best of 3: 1 sec per loop\n" |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
200 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
201 def run_main(self, seconds_per_increment=1.0, switches=None, timer=None): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
202 if timer is None: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
203 timer = FakeTimer(seconds_per_increment=seconds_per_increment) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
204 if switches is None: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
205 args = [] |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
206 else: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
207 args = switches[:] |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
208 args.append(self.fake_stmt) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
209 # timeit.main() modifies sys.path, so save and restore it. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
210 orig_sys_path = sys.path[:] |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
211 with captured_stdout() as s: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
212 timeit.main(args=args, _wrap_timer=timer.wrap_timer) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
213 sys.path[:] = orig_sys_path[:] |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
214 return s.getvalue() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
215 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
216 def test_main_bad_switch(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
217 s = self.run_main(switches=['--bad-switch']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
218 self.assertEqual(s, dedent("""\ |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
219 option --bad-switch not recognized |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
220 use -h/--help for command line help |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
221 """)) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
222 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
223 def test_main_seconds(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
224 s = self.run_main(seconds_per_increment=5.5) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
225 self.assertEqual(s, "10 loops, best of 3: 5.5 sec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
226 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
227 def test_main_milliseconds(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
228 s = self.run_main(seconds_per_increment=0.0055) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
229 self.assertEqual(s, "100 loops, best of 3: 5.5 msec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
230 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
231 def test_main_microseconds(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
232 s = self.run_main(seconds_per_increment=0.0000025, switches=['-n100']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
233 self.assertEqual(s, "100 loops, best of 3: 2.5 usec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
234 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
235 def test_main_fixed_iters(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
236 s = self.run_main(seconds_per_increment=2.0, switches=['-n35']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
237 self.assertEqual(s, "35 loops, best of 3: 2 sec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
238 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
239 def test_main_setup(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
240 s = self.run_main(seconds_per_increment=2.0, |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
241 switches=['-n35', '-s', 'print("CustomSetup")']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
242 self.assertEqual(s, "CustomSetup\n" * 3 + |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
243 "35 loops, best of 3: 2 sec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
244 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
245 def test_main_fixed_reps(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
246 s = self.run_main(seconds_per_increment=60.0, switches=['-r9']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
247 self.assertEqual(s, "10 loops, best of 9: 60 sec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
248 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
249 def test_main_negative_reps(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
250 s = self.run_main(seconds_per_increment=60.0, switches=['-r-5']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
251 self.assertEqual(s, "10 loops, best of 1: 60 sec per loop\n") |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
252 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
253 def test_main_help(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
254 s = self.run_main(switches=['-h']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
255 # Note: It's not clear that the trailing space was intended as part of |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
256 # the help text, but since it's there, check for it. |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
257 self.assertEqual(s, timeit.__doc__ + ' ') |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
258 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
259 def test_main_using_time(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
260 fake_timer = FakeTimer() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
261 s = self.run_main(switches=['-t'], timer=fake_timer) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
262 self.assertEqual(s, self.MAIN_DEFAULT_OUTPUT) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
263 self.assertIs(fake_timer.saved_timer, time.time) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
264 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
265 def test_main_using_clock(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
266 fake_timer = FakeTimer() |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
267 s = self.run_main(switches=['-c'], timer=fake_timer) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
268 self.assertEqual(s, self.MAIN_DEFAULT_OUTPUT) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
269 self.assertIs(fake_timer.saved_timer, time.clock) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
270 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
271 def test_main_verbose(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
272 s = self.run_main(switches=['-v']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
273 self.assertEqual(s, dedent("""\ |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
274 10 loops -> 10 secs |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
275 raw times: 10 10 10 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
276 10 loops, best of 3: 1 sec per loop |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
277 """)) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
278 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
279 def test_main_very_verbose(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
280 s = self.run_main(seconds_per_increment=0.000050, switches=['-vv']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
281 self.assertEqual(s, dedent("""\ |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
282 10 loops -> 0.0005 secs |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
283 100 loops -> 0.005 secs |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
284 1000 loops -> 0.05 secs |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
285 10000 loops -> 0.5 secs |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
286 raw times: 0.5 0.5 0.5 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
287 10000 loops, best of 3: 50 usec per loop |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
288 """)) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
289 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
290 def test_main_exception(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
291 with captured_stderr() as error_stringio: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
292 s = self.run_main(switches=['1/0']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
293 self.assert_exc_string(error_stringio.getvalue(), 'ZeroDivisionError') |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
294 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
295 def test_main_exception_fixed_reps(self): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
296 with captured_stderr() as error_stringio: |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
297 s = self.run_main(switches=['-n1', '1/0']) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
298 self.assert_exc_string(error_stringio.getvalue(), 'ZeroDivisionError') |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
299 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
300 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
301 def test_main(): |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
302 run_unittest(TestTimeit) |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
303 |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
304 if __name__ == '__main__': |
|
628a3679dc14
#11578: add unit tests for timeit module.
R David Murray <rdmurray@bitdance.com>
parents:
diff
changeset
|
305 test_main() |
