191 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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
 |