| 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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(self.rounds): | |
| pass |