symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/profilee.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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