1 """ 2 Input for test_profile.py and test_cprofile.py. 3 4 IMPORTANT: This stuff is touchy. If you modify anything above the 5 test class you'll have to regenerate the stats by running the two 6 test files. 7 8 *ALL* NUMBERS in the expected output are relevant. If you change 9 the formatting of pstats, please don't just regenerate the expected 10 output without checking very carefully that not a single number has 11 changed. 12 """ 13 14 import sys 15 16 # In order to have reproducible time, we simulate a timer in the global 17 # variable 'TICKS', which represents simulated time in milliseconds. 18 # (We can't use a helper function increment the timer since it would be 19 # included in the profile and would appear to consume all the time.) 20 TICKS = 42000 21 22 def timer(): 23 return TICKS 24 25 def testfunc(): 26 # 1 call 27 # 1000 ticks total: 270 ticks local, 730 ticks in subfunctions 28 global TICKS 29 TICKS += 99 30 helper() # 300 31 helper() # 300 32 TICKS += 171 33 factorial(14) # 130 34 35 def factorial(n): 36 # 23 calls total 37 # 170 ticks total, 150 ticks local 38 # 3 primitive calls, 130, 20 and 20 ticks total 39 # including 116, 17, 17 ticks local 40 global TICKS 41 if n > 0: 42 TICKS += n 43 return mul(n, factorial(n-1)) 44 else: 45 TICKS += 11 46 return 1 47 48 def mul(a, b): 49 # 20 calls 50 # 1 tick, local 51 global TICKS 52 TICKS += 1 53 return a * b 54 55 def helper(): 56 # 2 calls 57 # 300 ticks total: 20 ticks local, 260 ticks in subfunctions 58 global TICKS 59 TICKS += 1 60 helper1() # 30 61 TICKS += 2 62 helper1() # 30 63 TICKS += 6 64 helper2() # 50 65 TICKS += 3 66 helper2() # 50 67 TICKS += 2 68 helper2() # 50 69 TICKS += 5 70 helper2_indirect() # 70 71 TICKS += 1 72 73 def helper1(): 74 # 4 calls 75 # 30 ticks total: 29 ticks local, 1 tick in subfunctions 76 global TICKS 77 TICKS += 10 78 hasattr(C(), "foo") # 1 79 TICKS += 19 80 lst = [] 81 lst.append(42) # 0 82 sys.exc_info() # 0 83 84 def helper2_indirect(): 85 helper2() # 50 86 factorial(3) # 20 87 88 def helper2(): 89 # 8 calls 90 # 50 ticks local: 39 ticks local, 11 ticks in subfunctions 91 global TICKS 92 TICKS += 11 93 hasattr(C(), "bar") # 1 94 TICKS += 13 95 subhelper() # 10 96 TICKS += 15 97 98 def subhelper(): 99 # 8 calls 100 # 10 ticks total: 8 ticks local, 2 ticks in subfunctions 101 global TICKS 102 TICKS += 2 103 for i in range(2): # 0 104 try: 105 C().foo # 1 x 2 106 except AttributeError: 107 TICKS += 3 # 3 x 2 108 109 class C: 110 def __getattr__(self, name): 111 # 28 calls 112 # 1 tick, local 113 global TICKS 114 TICKS += 1 115 raise AttributeError 116