Home | History | Annotate | Download | only in test
      1 """Test suite for the cProfile module."""
      2 
      3 import sys
      4 from test.test_support import run_unittest, TESTFN, unlink
      5 
      6 # rip off all interesting stuff from test_profile
      7 import cProfile
      8 from test.test_profile import ProfileTest, regenerate_expected_output
      9 
     10 class CProfileTest(ProfileTest):
     11     profilerclass = cProfile.Profile
     12     expected_list_sort_output = "{method 'sort' of 'list' objects}"
     13 
     14     # Issue 3895.
     15     def test_bad_counter_during_dealloc(self):
     16         import _lsprof
     17         # Must use a file as StringIO doesn't trigger the bug.
     18         sys.stderr = open(TESTFN, 'w')
     19         try:
     20             obj = _lsprof.Profiler(lambda: int)
     21             obj.enable()
     22             obj = _lsprof.Profiler(1)
     23             obj.disable()
     24         finally:
     25             sys.stderr = sys.__stderr__
     26             unlink(TESTFN)
     27 
     28 
     29 def test_main():
     30     run_unittest(CProfileTest)
     31 
     32 def main():
     33     if '-r' not in sys.argv:
     34         test_main()
     35     else:
     36         regenerate_expected_output(__file__, CProfileTest)
     37 
     38 
     39 # Don't remove this comment. Everything below it is auto-generated.
     40 #--cut--------------------------------------------------------------------------
     41 CProfileTest.expected_output['print_stats'] = """\
     42          126 function calls (106 primitive calls) in 1.000 seconds
     43 
     44    Ordered by: standard name
     45 
     46    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     47         1    0.000    0.000    1.000    1.000 <string>:1(<module>)
     48        28    0.028    0.001    0.028    0.001 profilee.py:110(__getattr__)
     49         1    0.270    0.270    1.000    1.000 profilee.py:25(testfunc)
     50      23/3    0.150    0.007    0.170    0.057 profilee.py:35(factorial)
     51        20    0.020    0.001    0.020    0.001 profilee.py:48(mul)
     52         2    0.040    0.020    0.600    0.300 profilee.py:55(helper)
     53         4    0.116    0.029    0.120    0.030 profilee.py:73(helper1)
     54         2    0.000    0.000    0.140    0.070 profilee.py:84(helper2_indirect)
     55         8    0.312    0.039    0.400    0.050 profilee.py:88(helper2)
     56         8    0.064    0.008    0.080    0.010 profilee.py:98(subhelper)
     57        12    0.000    0.000    0.012    0.001 {hasattr}
     58         4    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}
     59         1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
     60         8    0.000    0.000    0.000    0.000 {range}
     61         4    0.000    0.000    0.000    0.000 {sys.exc_info}
     62 
     63 
     64 """
     65 CProfileTest.expected_output['print_callers'] = """\
     66    Ordered by: standard name
     67 
     68 Function                                          was called by...
     69                                                       ncalls  tottime  cumtime
     70 <string>:1(<module>)                              <-
     71 profilee.py:110(__getattr__)                      <-      16    0.016    0.016  profilee.py:98(subhelper)
     72                                                           12    0.012    0.012  {hasattr}
     73 profilee.py:25(testfunc)                          <-       1    0.270    1.000  <string>:1(<module>)
     74 profilee.py:35(factorial)                         <-       1    0.014    0.130  profilee.py:25(testfunc)
     75                                                         20/3    0.130    0.147  profilee.py:35(factorial)
     76                                                            2    0.006    0.040  profilee.py:84(helper2_indirect)
     77 profilee.py:48(mul)                               <-      20    0.020    0.020  profilee.py:35(factorial)
     78 profilee.py:55(helper)                            <-       2    0.040    0.600  profilee.py:25(testfunc)
     79 profilee.py:73(helper1)                           <-       4    0.116    0.120  profilee.py:55(helper)
     80 profilee.py:84(helper2_indirect)                  <-       2    0.000    0.140  profilee.py:55(helper)
     81 profilee.py:88(helper2)                           <-       6    0.234    0.300  profilee.py:55(helper)
     82                                                            2    0.078    0.100  profilee.py:84(helper2_indirect)
     83 profilee.py:98(subhelper)                         <-       8    0.064    0.080  profilee.py:88(helper2)
     84 {hasattr}                                         <-       4    0.000    0.004  profilee.py:73(helper1)
     85                                                            8    0.000    0.008  profilee.py:88(helper2)
     86 {method 'append' of 'list' objects}               <-       4    0.000    0.000  profilee.py:73(helper1)
     87 {method 'disable' of '_lsprof.Profiler' objects}  <-
     88 {range}                                           <-       8    0.000    0.000  profilee.py:98(subhelper)
     89 {sys.exc_info}                                    <-       4    0.000    0.000  profilee.py:73(helper1)
     90 
     91 
     92 """
     93 CProfileTest.expected_output['print_callees'] = """\
     94    Ordered by: standard name
     95 
     96 Function                                          called...
     97                                                       ncalls  tottime  cumtime
     98 <string>:1(<module>)                              ->       1    0.270    1.000  profilee.py:25(testfunc)
     99 profilee.py:110(__getattr__)                      ->
    100 profilee.py:25(testfunc)                          ->       1    0.014    0.130  profilee.py:35(factorial)
    101                                                            2    0.040    0.600  profilee.py:55(helper)
    102 profilee.py:35(factorial)                         ->    20/3    0.130    0.147  profilee.py:35(factorial)
    103                                                           20    0.020    0.020  profilee.py:48(mul)
    104 profilee.py:48(mul)                               ->
    105 profilee.py:55(helper)                            ->       4    0.116    0.120  profilee.py:73(helper1)
    106                                                            2    0.000    0.140  profilee.py:84(helper2_indirect)
    107                                                            6    0.234    0.300  profilee.py:88(helper2)
    108 profilee.py:73(helper1)                           ->       4    0.000    0.004  {hasattr}
    109                                                            4    0.000    0.000  {method 'append' of 'list' objects}
    110                                                            4    0.000    0.000  {sys.exc_info}
    111 profilee.py:84(helper2_indirect)                  ->       2    0.006    0.040  profilee.py:35(factorial)
    112                                                            2    0.078    0.100  profilee.py:88(helper2)
    113 profilee.py:88(helper2)                           ->       8    0.064    0.080  profilee.py:98(subhelper)
    114                                                            8    0.000    0.008  {hasattr}
    115 profilee.py:98(subhelper)                         ->      16    0.016    0.016  profilee.py:110(__getattr__)
    116                                                            8    0.000    0.000  {range}
    117 {hasattr}                                         ->      12    0.012    0.012  profilee.py:110(__getattr__)
    118 {method 'append' of 'list' objects}               ->
    119 {method 'disable' of '_lsprof.Profiler' objects}  ->
    120 {range}                                           ->
    121 {sys.exc_info}                                    ->
    122 
    123 
    124 """
    125 
    126 if __name__ == "__main__":
    127     main()
    128