symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_profile.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """Test suite for the profile module."""
       
     2 
       
     3 import os
       
     4 import sys
       
     5 import pstats
       
     6 import unittest
       
     7 from StringIO import StringIO
       
     8 from test.test_support import run_unittest
       
     9 
       
    10 import profile
       
    11 from test.profilee import testfunc, timer
       
    12 
       
    13 
       
    14 class ProfileTest(unittest.TestCase):
       
    15 
       
    16     profilerclass = profile.Profile
       
    17     methodnames = ['print_stats', 'print_callers', 'print_callees']
       
    18     expected_output = {}
       
    19 
       
    20     @classmethod
       
    21     def do_profiling(cls):
       
    22         results = []
       
    23         prof = cls.profilerclass(timer, 0.001)
       
    24         start_timer = timer()
       
    25         prof.runctx("testfunc()", globals(), locals())
       
    26         results.append(timer() - start_timer)
       
    27         for methodname in cls.methodnames:
       
    28             s = StringIO()
       
    29             stats = pstats.Stats(prof, stream=s)
       
    30             stats.strip_dirs().sort_stats("stdname")
       
    31             getattr(stats, methodname)()
       
    32             results.append(s.getvalue())
       
    33         return results
       
    34 
       
    35     def test_cprofile(self):
       
    36         results = self.do_profiling()
       
    37         self.assertEqual(results[0], 1000)
       
    38         for i, method in enumerate(self.methodnames):
       
    39             self.assertEqual(results[i+1], self.expected_output[method],
       
    40                              "Stats.%s output for %s doesn't fit expectation!" %
       
    41                              (method, self.profilerclass.__name__))
       
    42 
       
    43 
       
    44 def regenerate_expected_output(filename, cls):
       
    45     filename = filename.rstrip('co')
       
    46     print 'Regenerating %s...' % filename
       
    47     results = cls.do_profiling()
       
    48 
       
    49     newfile = []
       
    50     with open(filename, 'r') as f:
       
    51         for line in f:
       
    52             newfile.append(line)
       
    53             if line[:6] == '#--cut':
       
    54                 break
       
    55 
       
    56     with open(filename, 'w') as f:
       
    57         f.writelines(newfile)
       
    58         for i, method in enumerate(cls.methodnames):
       
    59             f.write('%s.expected_output[%r] = """\\\n%s"""\n' % (
       
    60                 cls.__name__, method, results[i+1]))
       
    61         f.write('\nif __name__ == "__main__":\n    main()\n')
       
    62 
       
    63 
       
    64 def test_main():
       
    65     run_unittest(ProfileTest)
       
    66 
       
    67 def main():
       
    68     if '-r' not in sys.argv:
       
    69         test_main()
       
    70     else:
       
    71         regenerate_expected_output(__file__, ProfileTest)
       
    72 
       
    73 
       
    74 # Don't remove this comment. Everything below it is auto-generated.
       
    75 #--cut--------------------------------------------------------------------------
       
    76 ProfileTest.expected_output['print_stats'] = """\
       
    77          127 function calls (107 primitive calls) in 999.749 CPU seconds
       
    78 
       
    79    Ordered by: standard name
       
    80 
       
    81    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       
    82         4   -0.004   -0.001   -0.004   -0.001 :0(append)
       
    83         4   -0.004   -0.001   -0.004   -0.001 :0(exc_info)
       
    84        12   -0.024   -0.002   11.964    0.997 :0(hasattr)
       
    85         8   -0.008   -0.001   -0.008   -0.001 :0(range)
       
    86         1    0.000    0.000    0.000    0.000 :0(setprofile)
       
    87         1   -0.002   -0.002  999.751  999.751 <string>:1(<module>)
       
    88         0    0.000             0.000          profile:0(profiler)
       
    89         1   -0.002   -0.002  999.749  999.749 profile:0(testfunc())
       
    90        28   27.972    0.999   27.972    0.999 profilee.py:110(__getattr__)
       
    91         1  269.996  269.996  999.753  999.753 profilee.py:25(testfunc)
       
    92      23/3  149.937    6.519  169.917   56.639 profilee.py:35(factorial)
       
    93        20   19.980    0.999   19.980    0.999 profilee.py:48(mul)
       
    94         2   39.986   19.993  599.814  299.907 profilee.py:55(helper)
       
    95         4  115.984   28.996  119.964   29.991 profilee.py:73(helper1)
       
    96         2   -0.006   -0.003  139.942   69.971 profilee.py:84(helper2_indirect)
       
    97         8  311.976   38.997  399.896   49.987 profilee.py:88(helper2)
       
    98         8   63.968    7.996   79.944    9.993 profilee.py:98(subhelper)
       
    99 
       
   100 
       
   101 """
       
   102 ProfileTest.expected_output['print_callers'] = """\
       
   103    Ordered by: standard name
       
   104 
       
   105 Function                          was called by...
       
   106 :0(append)                        <- profilee.py:73(helper1)(4)  119.964
       
   107 :0(exc_info)                      <- profilee.py:73(helper1)(4)  119.964
       
   108 :0(hasattr)                       <- profilee.py:73(helper1)(4)  119.964
       
   109                                      profilee.py:88(helper2)(8)  399.896
       
   110 :0(range)                         <- profilee.py:98(subhelper)(8)   79.944
       
   111 :0(setprofile)                    <- profile:0(testfunc())(1)  999.749
       
   112 <string>:1(<module>)              <- profile:0(testfunc())(1)  999.749
       
   113 profile:0(profiler)               <-
       
   114 profile:0(testfunc())             <- profile:0(profiler)(1)    0.000
       
   115 profilee.py:110(__getattr__)      <- :0(hasattr)(12)   11.964
       
   116                                      profilee.py:98(subhelper)(16)   79.944
       
   117 profilee.py:25(testfunc)          <- <string>:1(<module>)(1)  999.751
       
   118 profilee.py:35(factorial)         <- profilee.py:25(testfunc)(1)  999.753
       
   119                                      profilee.py:35(factorial)(20)  169.917
       
   120                                      profilee.py:84(helper2_indirect)(2)  139.942
       
   121 profilee.py:48(mul)               <- profilee.py:35(factorial)(20)  169.917
       
   122 profilee.py:55(helper)            <- profilee.py:25(testfunc)(2)  999.753
       
   123 profilee.py:73(helper1)           <- profilee.py:55(helper)(4)  599.814
       
   124 profilee.py:84(helper2_indirect)  <- profilee.py:55(helper)(2)  599.814
       
   125 profilee.py:88(helper2)           <- profilee.py:55(helper)(6)  599.814
       
   126                                      profilee.py:84(helper2_indirect)(2)  139.942
       
   127 profilee.py:98(subhelper)         <- profilee.py:88(helper2)(8)  399.896
       
   128 
       
   129 
       
   130 """
       
   131 ProfileTest.expected_output['print_callees'] = """\
       
   132    Ordered by: standard name
       
   133 
       
   134 Function                          called...
       
   135 :0(append)                        ->
       
   136 :0(exc_info)                      ->
       
   137 :0(hasattr)                       -> profilee.py:110(__getattr__)(12)   27.972
       
   138 :0(range)                         ->
       
   139 :0(setprofile)                    ->
       
   140 <string>:1(<module>)              -> profilee.py:25(testfunc)(1)  999.753
       
   141 profile:0(profiler)               -> profile:0(testfunc())(1)  999.749
       
   142 profile:0(testfunc())             -> :0(setprofile)(1)    0.000
       
   143                                      <string>:1(<module>)(1)  999.751
       
   144 profilee.py:110(__getattr__)      ->
       
   145 profilee.py:25(testfunc)          -> profilee.py:35(factorial)(1)  169.917
       
   146                                      profilee.py:55(helper)(2)  599.814
       
   147 profilee.py:35(factorial)         -> profilee.py:35(factorial)(20)  169.917
       
   148                                      profilee.py:48(mul)(20)   19.980
       
   149 profilee.py:48(mul)               ->
       
   150 profilee.py:55(helper)            -> profilee.py:73(helper1)(4)  119.964
       
   151                                      profilee.py:84(helper2_indirect)(2)  139.942
       
   152                                      profilee.py:88(helper2)(6)  399.896
       
   153 profilee.py:73(helper1)           -> :0(append)(4)   -0.004
       
   154                                      :0(exc_info)(4)   -0.004
       
   155                                      :0(hasattr)(4)   11.964
       
   156 profilee.py:84(helper2_indirect)  -> profilee.py:35(factorial)(2)  169.917
       
   157                                      profilee.py:88(helper2)(2)  399.896
       
   158 profilee.py:88(helper2)           -> :0(hasattr)(8)   11.964
       
   159                                      profilee.py:98(subhelper)(8)   79.944
       
   160 profilee.py:98(subhelper)         -> :0(range)(8)   -0.008
       
   161                                      profilee.py:110(__getattr__)(16)   27.972
       
   162 
       
   163 
       
   164 """
       
   165 
       
   166 if __name__ == "__main__":
       
   167     main()