diff --git a/Tools/pybench/Setup.py b/Tools/pybench/Setup.py index f1417e6c3f6..21e654afba4 100644 --- a/Tools/pybench/Setup.py +++ b/Tools/pybench/Setup.py @@ -30,6 +30,10 @@ from Lists import * from Tuples import * from Dict import * from Exceptions import * +try: + from With import * +except SyntaxError: + pass from Imports import * from Strings import * from Numbers import * diff --git a/Tools/pybench/With.py b/Tools/pybench/With.py new file mode 100644 index 00000000000..3af24cc6b7e --- /dev/null +++ b/Tools/pybench/With.py @@ -0,0 +1,190 @@ +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