| from __future__ import with_statement | 
 | from pybench import Test | 
 |  | 
 | class WithFinally(Test): | 
 |  | 
 |     version = 2.0 | 
 |     operations = 20 | 
 |     rounds = 80000 | 
 |  | 
 |     class ContextManager(object): | 
 |         def __enter__(self): | 
 |             pass | 
 |         def __exit__(self, exc, val, tb): | 
 |             pass | 
 |  | 
 |     def test(self): | 
 |  | 
 |         cm = self.ContextManager() | 
 |  | 
 |         for i in range(self.rounds): | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |             with cm: pass | 
 |  | 
 |     def calibrate(self): | 
 |  | 
 |         cm = self.ContextManager() | 
 |  | 
 |         for i in range(self.rounds): | 
 |             pass | 
 |  | 
 |  | 
 | class TryFinally(Test): | 
 |  | 
 |     version = 2.0 | 
 |     operations = 20 | 
 |     rounds = 80000 | 
 |  | 
 |     class ContextManager(object): | 
 |         def __enter__(self): | 
 |             pass | 
 |         def __exit__(self): | 
 |             # "Context manager" objects used just for their cleanup | 
 |             # actions in finally blocks usually don't have parameters. | 
 |             pass | 
 |  | 
 |     def test(self): | 
 |  | 
 |         cm = self.ContextManager() | 
 |  | 
 |         for i in range(self.rounds): | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |             cm.__enter__() | 
 |             try: pass | 
 |             finally: cm.__exit__() | 
 |  | 
 |     def calibrate(self): | 
 |  | 
 |         cm = self.ContextManager() | 
 |  | 
 |         for i in range(self.rounds): | 
 |             pass | 
 |  | 
 |  | 
 | class WithRaiseExcept(Test): | 
 |  | 
 |     version = 2.0 | 
 |     operations = 2 + 3 + 3 | 
 |     rounds = 100000 | 
 |  | 
 |     class BlockExceptions(object): | 
 |         def __enter__(self): | 
 |             pass | 
 |         def __exit__(self, exc, val, tb): | 
 |             return True | 
 |  | 
 |     def test(self): | 
 |  | 
 |         error = ValueError | 
 |         be = self.BlockExceptions() | 
 |  | 
 |         for i in range(self.rounds): | 
 |             with be: raise error | 
 |             with be: raise error | 
 |             with be: raise error("something") | 
 |             with be: raise error("something") | 
 |             with be: raise error("something") | 
 |             with be: raise error("something") | 
 |             with be: raise error("something") | 
 |             with be: raise error("something") | 
 |  | 
 |     def calibrate(self): | 
 |  | 
 |         error = ValueError | 
 |         be = self.BlockExceptions() | 
 |  | 
 |         for i in range(self.rounds): | 
 |             pass |