1from __future__ import with_statement
2from pybench import Test
3
4class WithFinally(Test):
5
6    version = 2.0
7    operations = 20
8    rounds = 80000
9
10    class ContextManager(object):
11        def __enter__(self):
12            pass
13        def __exit__(self, exc, val, tb):
14            pass
15
16    def test(self):
17
18        cm = self.ContextManager()
19
20        for i in xrange(self.rounds):
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            with cm: pass
41
42    def calibrate(self):
43
44        cm = self.ContextManager()
45
46        for i in xrange(self.rounds):
47            pass
48
49
50class TryFinally(Test):
51
52    version = 2.0
53    operations = 20
54    rounds = 80000
55
56    class ContextManager(object):
57        def __enter__(self):
58            pass
59        def __exit__(self):
60            # "Context manager" objects used just for their cleanup
61            # actions in finally blocks usually don't have parameters.
62            pass
63
64    def test(self):
65
66        cm = self.ContextManager()
67
68        for i in xrange(self.rounds):
69            cm.__enter__()
70            try: pass
71            finally: cm.__exit__()
72
73            cm.__enter__()
74            try: pass
75            finally: cm.__exit__()
76
77            cm.__enter__()
78            try: pass
79            finally: cm.__exit__()
80
81            cm.__enter__()
82            try: pass
83            finally: cm.__exit__()
84
85            cm.__enter__()
86            try: pass
87            finally: cm.__exit__()
88
89            cm.__enter__()
90            try: pass
91            finally: cm.__exit__()
92
93            cm.__enter__()
94            try: pass
95            finally: cm.__exit__()
96
97            cm.__enter__()
98            try: pass
99            finally: cm.__exit__()
100
101            cm.__enter__()
102            try: pass
103            finally: cm.__exit__()
104
105            cm.__enter__()
106            try: pass
107            finally: cm.__exit__()
108
109            cm.__enter__()
110            try: pass
111            finally: cm.__exit__()
112
113            cm.__enter__()
114            try: pass
115            finally: cm.__exit__()
116
117            cm.__enter__()
118            try: pass
119            finally: cm.__exit__()
120
121            cm.__enter__()
122            try: pass
123            finally: cm.__exit__()
124
125            cm.__enter__()
126            try: pass
127            finally: cm.__exit__()
128
129            cm.__enter__()
130            try: pass
131            finally: cm.__exit__()
132
133            cm.__enter__()
134            try: pass
135            finally: cm.__exit__()
136
137            cm.__enter__()
138            try: pass
139            finally: cm.__exit__()
140
141            cm.__enter__()
142            try: pass
143            finally: cm.__exit__()
144
145            cm.__enter__()
146            try: pass
147            finally: cm.__exit__()
148
149    def calibrate(self):
150
151        cm = self.ContextManager()
152
153        for i in xrange(self.rounds):
154            pass
155
156
157class WithRaiseExcept(Test):
158
159    version = 2.0
160    operations = 2 + 3 + 3
161    rounds = 100000
162
163    class BlockExceptions(object):
164        def __enter__(self):
165            pass
166        def __exit__(self, exc, val, tb):
167            return True
168
169    def test(self):
170
171        error = ValueError
172        be = self.BlockExceptions()
173
174        for i in xrange(self.rounds):
175            with be: raise error
176            with be: raise error
177            with be: raise error,"something"
178            with be: raise error,"something"
179            with be: raise error,"something"
180            with be: raise error("something")
181            with be: raise error("something")
182            with be: raise error("something")
183
184    def calibrate(self):
185
186        error = ValueError
187        be = self.BlockExceptions()
188
189        for i in xrange(self.rounds):
190            pass
191