1""" 2Input for test_profile.py and test_cprofile.py. 3 4IMPORTANT: This stuff is touchy. If you modify anything above the 5test class you'll have to regenerate the stats by running the two 6test files. 7 8*ALL* NUMBERS in the expected output are relevant. If you change 9the formatting of pstats, please don't just regenerate the expected 10output without checking very carefully that not a single number has 11changed. 12""" 13 14import 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.) 20TICKS = 42000 21 22def timer(): 23 return TICKS 24 25def 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 35def 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 48def mul(a, b): 49 # 20 calls 50 # 1 tick, local 51 global TICKS 52 TICKS += 1 53 return a * b 54 55def 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 73def 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 84def helper2_indirect(): 85 helper2() # 50 86 factorial(3) # 20 87 88def 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 98def 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 109class C: 110 def __getattr__(self, name): 111 # 28 calls 112 # 1 tick, local 113 global TICKS 114 TICKS += 1 115 raise AttributeError 116