blob: 30cd3c2c8a530f258b2e16a521ef705d84be1fc1 [file] [log] [blame]
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +00001from pybench import Test
2
3class WithFinally(Test):
4
5 version = 2.0
6 operations = 20
7 rounds = 80000
8
9 class ContextManager(object):
10 def __enter__(self):
11 pass
12 def __exit__(self, exc, val, tb):
13 pass
14
15 def test(self):
16
17 cm = self.ContextManager()
18
Georg Brandlbf82e372008-05-16 17:02:34 +000019 for i in range(self.rounds):
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +000020 with cm: pass
21 with cm: pass
22 with cm: pass
23 with cm: pass
24 with cm: pass
25 with cm: pass
26 with cm: pass
27 with cm: pass
28 with cm: pass
29 with cm: pass
30 with cm: pass
31 with cm: pass
32 with cm: pass
33 with cm: pass
34 with cm: pass
35 with cm: pass
36 with cm: pass
37 with cm: pass
38 with cm: pass
39 with cm: pass
40
41 def calibrate(self):
42
43 cm = self.ContextManager()
44
Georg Brandlbf82e372008-05-16 17:02:34 +000045 for i in range(self.rounds):
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +000046 pass
47
48
49class TryFinally(Test):
50
51 version = 2.0
52 operations = 20
53 rounds = 80000
54
55 class ContextManager(object):
56 def __enter__(self):
57 pass
58 def __exit__(self):
59 # "Context manager" objects used just for their cleanup
60 # actions in finally blocks usually don't have parameters.
61 pass
62
63 def test(self):
64
65 cm = self.ContextManager()
66
Georg Brandlbf82e372008-05-16 17:02:34 +000067 for i in range(self.rounds):
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +000068 cm.__enter__()
69 try: pass
70 finally: cm.__exit__()
71
72 cm.__enter__()
73 try: pass
74 finally: cm.__exit__()
75
76 cm.__enter__()
77 try: pass
78 finally: cm.__exit__()
79
80 cm.__enter__()
81 try: pass
82 finally: cm.__exit__()
83
84 cm.__enter__()
85 try: pass
86 finally: cm.__exit__()
87
88 cm.__enter__()
89 try: pass
90 finally: cm.__exit__()
91
92 cm.__enter__()
93 try: pass
94 finally: cm.__exit__()
95
96 cm.__enter__()
97 try: pass
98 finally: cm.__exit__()
99
100 cm.__enter__()
101 try: pass
102 finally: cm.__exit__()
103
104 cm.__enter__()
105 try: pass
106 finally: cm.__exit__()
107
108 cm.__enter__()
109 try: pass
110 finally: cm.__exit__()
111
112 cm.__enter__()
113 try: pass
114 finally: cm.__exit__()
115
116 cm.__enter__()
117 try: pass
118 finally: cm.__exit__()
119
120 cm.__enter__()
121 try: pass
122 finally: cm.__exit__()
123
124 cm.__enter__()
125 try: pass
126 finally: cm.__exit__()
127
128 cm.__enter__()
129 try: pass
130 finally: cm.__exit__()
131
132 cm.__enter__()
133 try: pass
134 finally: cm.__exit__()
135
136 cm.__enter__()
137 try: pass
138 finally: cm.__exit__()
139
140 cm.__enter__()
141 try: pass
142 finally: cm.__exit__()
143
144 cm.__enter__()
145 try: pass
146 finally: cm.__exit__()
147
148 def calibrate(self):
149
150 cm = self.ContextManager()
151
Georg Brandlbf82e372008-05-16 17:02:34 +0000152 for i in range(self.rounds):
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +0000153 pass
154
155
156class WithRaiseExcept(Test):
157
158 version = 2.0
159 operations = 2 + 3 + 3
160 rounds = 100000
161
162 class BlockExceptions(object):
163 def __enter__(self):
164 pass
165 def __exit__(self, exc, val, tb):
166 return True
167
168 def test(self):
169
170 error = ValueError
171 be = self.BlockExceptions()
172
Georg Brandlbf82e372008-05-16 17:02:34 +0000173 for i in range(self.rounds):
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +0000174 with be: raise error
175 with be: raise error
Georg Brandlbf82e372008-05-16 17:02:34 +0000176 with be: raise error("something")
177 with be: raise error("something")
178 with be: raise error("something")
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +0000179 with be: raise error("something")
180 with be: raise error("something")
181 with be: raise error("something")
182
183 def calibrate(self):
184
185 error = ValueError
186 be = self.BlockExceptions()
187
Georg Brandlbf82e372008-05-16 17:02:34 +0000188 for i in range(self.rounds):
Amaury Forgeot d'Arc2eb2c7c2008-03-20 21:22:04 +0000189 pass