diff options
author | Jeffrey Yasskin <jyasskin@gmail.com> | 2008-03-08 18:26:54 (GMT) |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@gmail.com> | 2008-03-08 18:26:54 (GMT) |
commit | 0df0f6d1b296e618a6bc5dc5a38fa1f2b391a5ef (patch) | |
tree | d1dbcc2c424474b49c2a084b97565260d0366ba9 | |
parent | c54aec1fda52a0f21bdd8c529c9bb9c92b24f96a (diff) | |
download | cpython-0df0f6d1b296e618a6bc5dc5a38fa1f2b391a5ef.zip cpython-0df0f6d1b296e618a6bc5dc5a38fa1f2b391a5ef.tar.gz cpython-0df0f6d1b296e618a6bc5dc5a38fa1f2b391a5ef.tar.bz2 |
Add tests for with and finally performance to pybench.
-rw-r--r-- | Tools/pybench/Setup.py | 4 | ||||
-rw-r--r-- | Tools/pybench/With.py | 190 |
2 files changed, 194 insertions, 0 deletions
diff --git a/Tools/pybench/Setup.py b/Tools/pybench/Setup.py index f1417e6..21e654a 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 0000000..3af24cc --- /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 |