[Python-checkins] r61313 - python/trunk/Tools/pybench/Setup.py python/trunk/Tools/pybench/With.py

jeffrey.yasskin python-checkins at python.org
Sat Mar 8 19:26:55 CET 2008


Author: jeffrey.yasskin
Date: Sat Mar  8 19:26:54 2008
New Revision: 61313

Added:
   python/trunk/Tools/pybench/With.py
Modified:
   python/trunk/Tools/pybench/Setup.py
Log:
Add tests for with and finally performance to pybench.


Modified: python/trunk/Tools/pybench/Setup.py
==============================================================================
--- python/trunk/Tools/pybench/Setup.py	(original)
+++ python/trunk/Tools/pybench/Setup.py	Sat Mar  8 19:26:54 2008
@@ -30,6 +30,10 @@
 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 *

Added: python/trunk/Tools/pybench/With.py
==============================================================================
--- (empty file)
+++ python/trunk/Tools/pybench/With.py	Sat Mar  8 19:26:54 2008
@@ -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


More information about the Python-checkins mailing list