diff options
| author | Georg Brandl <georg@python.org> | 2008-02-05 19:58:17 (GMT) | 
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2008-02-05 19:58:17 (GMT) | 
| commit | b70907796ac6e911f8683cce354fdeb94d24d73f (patch) | |
| tree | c73b85870bc0881c8cf592cd9af803a2d82afea5 /Lib/test/test_cprofile.py | |
| parent | 3c0f309fd1bc480ba3f225aba516e248adcc103e (diff) | |
| download | cpython-b70907796ac6e911f8683cce354fdeb94d24d73f.zip cpython-b70907796ac6e911f8683cce354fdeb94d24d73f.tar.gz cpython-b70907796ac6e911f8683cce354fdeb94d24d73f.tar.bz2 | |
* Use the same code to profile for test_profile and test_cprofile.
* Convert both to unittest.
* Use the same unit testing code.
* Include the expected output in both test files.
* Make it possible to regenerate the expected output by running
  the file as a script with an '-r' argument.
Diffstat (limited to 'Lib/test/test_cprofile.py')
| -rwxr-xr-x[-rw-r--r--] | Lib/test/test_cprofile.py | 308 | 
1 files changed, 106 insertions, 202 deletions
| diff --git a/Lib/test/test_cprofile.py b/Lib/test/test_cprofile.py index fdbd542..7ed6cec 100644..100755 --- a/Lib/test/test_cprofile.py +++ b/Lib/test/test_cprofile.py @@ -1,208 +1,112 @@ +"""Test suite for the cProfile module.""" +  import sys +from test.test_support import run_unittest + +# rip off all interesting stuff from test_profile  import cProfile -import pstats -import test.test_support - -################################# -#       Warning! -# This stuff is touchy. If you modify anything above the test_main function, -# you'll have to regenerate the stats for the doctest! -################################ - -TICKS = 42000 - -def timer(): -    return TICKS - -def testfunc(): -    # 1 call -    # 1000 ticks total: 270 ticks local, 730 ticks in subfunctions -    global TICKS -    TICKS += 99 -    helper()                            # 300 -    helper()                            # 300 -    TICKS += 171 -    factorial(14)                       # 130 - -def factorial(n): -    # 23 calls total -    # 170 ticks total, 150 ticks local -    # 3 primitive calls, 130, 20 and 20 ticks total -    # including 116, 17, 17 ticks local -    global TICKS -    if n > 0: -        TICKS += n -        return mul(n, factorial(n-1)) -    else: -        TICKS += 11 -        return 1 - -def mul(a, b): -    # 20 calls -    # 1 tick, local -    global TICKS -    TICKS += 1 -    return a * b - -def helper(): -    # 2 calls -    # 300 ticks total: 20 ticks local, 260 ticks in subfunctions -    global TICKS -    TICKS += 1 -    helper1()                           # 30 -    TICKS += 2 -    helper1()                           # 30 -    TICKS += 6 -    helper2()                           # 50 -    TICKS += 3 -    helper2()                           # 50 -    TICKS += 2 -    helper2()                           # 50 -    TICKS += 5 -    helper2_indirect()                  # 70 -    TICKS += 1 - -def helper1(): -    # 4 calls -    # 30 ticks total: 29 ticks local, 1 tick in subfunctions -    global TICKS -    TICKS += 10 -    hasattr(C(), "foo")                 # 1 -    TICKS += 19 -    lst = [] -    lst.append(42)                      # 0 -    sys.exc_info()                      # 0 - -def helper2_indirect(): -    helper2()                           # 50 -    factorial(3)                        # 20 - -def helper2(): -    # 8 calls -    # 50 ticks local: 39 ticks local, 11 ticks in subfunctions -    global TICKS -    TICKS += 11 -    hasattr(C(), "bar")                 # 1 -    TICKS += 13 -    subhelper()                         # 10 -    TICKS += 15 - -def subhelper(): -    # 8 calls -    # 10 ticks total: 8 ticks local, 2 ticks in subfunctions -    global TICKS -    TICKS += 2 -    for i in range(2):                  # 0 -        try: -            C().foo                     # 1 x 2 -        except AttributeError: -            TICKS += 3                  # 3 x 2 - -class C: -    def __getattr__(self, name): -        # 28 calls -        # 1 tick, local -        global TICKS -        TICKS += 1 -        raise AttributeError +from test.test_profile import ProfileTest, regenerate_expected_output + +class CProfileTest(ProfileTest): +    profilerclass = cProfile.Profile +  def test_main(): -    """ -    >>> prof = cProfile.Profile(timer, 0.001) -    >>> prof.runctx("testfunc()", globals(), locals()) #doctest: +ELLIPSIS -    <cProfile.Profile object at ...> -    >>> timer() -    43000 -    >>> stats = pstats.Stats(prof) -    >>> stats.strip_dirs().sort_stats("stdname") #doctest: +ELLIPSIS -    <pstats.Stats ...> -    >>> stats.print_stats() #doctest: +ELLIPSIS -             126 function calls (106 primitive calls) in 1.000 CPU seconds -    <BLANKLINE> -       Ordered by: standard name -    <BLANKLINE> -       ncalls  tottime  percall  cumtime  percall filename:lineno(function) -            1    0.000    0.000    1.000    1.000 <string>:1(<module>) -           28    0.028    0.001    0.028    0.001 test_cprofile.py:102(__getattr__) -            1    0.270    0.270    1.000    1.000 test_cprofile.py:17(testfunc) -         23/3    0.150    0.007    0.170    0.057 test_cprofile.py:27(factorial) -           20    0.020    0.001    0.020    0.001 test_cprofile.py:40(mul) -            2    0.040    0.020    0.600    0.300 test_cprofile.py:47(helper) -            4    0.116    0.029    0.120    0.030 test_cprofile.py:65(helper1) -            2    0.000    0.000    0.140    0.070 test_cprofile.py:76(helper2_indirect) -            8    0.312    0.039    0.400    0.050 test_cprofile.py:80(helper2) -            8    0.064    0.008    0.080    0.010 test_cprofile.py:90(subhelper) -           12    0.000    0.000    0.012    0.001 {hasattr} -            4    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects} -            1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects} -            8    0.000    0.000    0.000    0.000 {range} -            4    0.000    0.000    0.000    0.000 {sys.exc_info} -    <BLANKLINE> -    <BLANKLINE> -    <pstats.Stats instance at ...> -    >>> stats.print_callers() #doctest: +ELLIPSIS -       Ordered by: standard name -    <BLANKLINE> -    Function                                          was called by... -                                                          ncalls  tottime  cumtime -    <string>:1(<module>)                              <- -    test_cprofile.py:102(__getattr__)                 <-      16    0.016    0.016  test_cprofile.py:90(subhelper) -                                                              12    0.012    0.012  {hasattr} -    test_cprofile.py:17(testfunc)                     <-       1    0.270    1.000  <string>:1(<module>) -    test_cprofile.py:27(factorial)                    <-       1    0.014    0.130  test_cprofile.py:17(testfunc) -                                                            20/3    0.130    0.147  test_cprofile.py:27(factorial) -                                                               2    0.006    0.040  test_cprofile.py:76(helper2_indirect) -    test_cprofile.py:40(mul)                          <-      20    0.020    0.020  test_cprofile.py:27(factorial) -    test_cprofile.py:47(helper)                       <-       2    0.040    0.600  test_cprofile.py:17(testfunc) -    test_cprofile.py:65(helper1)                      <-       4    0.116    0.120  test_cprofile.py:47(helper) -    test_cprofile.py:76(helper2_indirect)             <-       2    0.000    0.140  test_cprofile.py:47(helper) -    test_cprofile.py:80(helper2)                      <-       6    0.234    0.300  test_cprofile.py:47(helper) -                                                               2    0.078    0.100  test_cprofile.py:76(helper2_indirect) -    test_cprofile.py:90(subhelper)                    <-       8    0.064    0.080  test_cprofile.py:80(helper2) -    {hasattr}                                         <-       4    0.000    0.004  test_cprofile.py:65(helper1) -                                                               8    0.000    0.008  test_cprofile.py:80(helper2) -    {method 'append' of 'list' objects}               <-       4    0.000    0.000  test_cprofile.py:65(helper1) -    {method 'disable' of '_lsprof.Profiler' objects}  <- -    {range}                                           <-       8    0.000    0.000  test_cprofile.py:90(subhelper) -    {sys.exc_info}                                    <-       4    0.000    0.000  test_cprofile.py:65(helper1) -    <BLANKLINE> -    <BLANKLINE> -    <pstats.Stats instance at ...> -    >>> stats.print_callees() #doctest: +ELLIPSIS -       Ordered by: standard name -    <BLANKLINE> -    Function                                          called... -                                                          ncalls  tottime  cumtime -    <string>:1(<module>)                              ->       1    0.270    1.000  test_cprofile.py:17(testfunc) -    test_cprofile.py:102(__getattr__)                 -> -    test_cprofile.py:17(testfunc)                     ->       1    0.014    0.130  test_cprofile.py:27(factorial) -                                                               2    0.040    0.600  test_cprofile.py:47(helper) -    test_cprofile.py:27(factorial)                    ->    20/3    0.130    0.147  test_cprofile.py:27(factorial) -                                                              20    0.020    0.020  test_cprofile.py:40(mul) -    test_cprofile.py:40(mul)                          -> -    test_cprofile.py:47(helper)                       ->       4    0.116    0.120  test_cprofile.py:65(helper1) -                                                               2    0.000    0.140  test_cprofile.py:76(helper2_indirect) -                                                               6    0.234    0.300  test_cprofile.py:80(helper2) -    test_cprofile.py:65(helper1)                      ->       4    0.000    0.004  {hasattr} -                                                               4    0.000    0.000  {method 'append' of 'list' objects} -                                                               4    0.000    0.000  {sys.exc_info} -    test_cprofile.py:76(helper2_indirect)             ->       2    0.006    0.040  test_cprofile.py:27(factorial) -                                                               2    0.078    0.100  test_cprofile.py:80(helper2) -    test_cprofile.py:80(helper2)                      ->       8    0.064    0.080  test_cprofile.py:90(subhelper) -                                                               8    0.000    0.008  {hasattr} -    test_cprofile.py:90(subhelper)                    ->      16    0.016    0.016  test_cprofile.py:102(__getattr__) -                                                               8    0.000    0.000  {range} -    {hasattr}                                         ->      12    0.012    0.012  test_cprofile.py:102(__getattr__) -    {method 'append' of 'list' objects}               -> -    {method 'disable' of '_lsprof.Profiler' objects}  -> -    {range}                                           -> -    {sys.exc_info}                                    -> -    <BLANKLINE> -    <BLANKLINE> -    <pstats.Stats instance at ...> -    """ -    from test import test_cprofile -    test.test_support.run_doctest(test_cprofile) +    run_unittest(CProfileTest) + +def main(): +    if '-r' not in sys.argv: +        test_main() +    else: +        regenerate_expected_output(__file__, CProfileTest) + + +# Don't remove this comment. Everything below it is auto-generated. +#--cut-------------------------------------------------------------------------- +CProfileTest.expected_output['print_stats'] = """\ +         126 function calls (106 primitive calls) in 1.000 CPU seconds + +   Ordered by: standard name + +   ncalls  tottime  percall  cumtime  percall filename:lineno(function) +        1    0.000    0.000    1.000    1.000 <string>:1(<module>) +       28    0.028    0.001    0.028    0.001 profilee.py:110(__getattr__) +        1    0.270    0.270    1.000    1.000 profilee.py:25(testfunc) +     23/3    0.150    0.007    0.170    0.057 profilee.py:35(factorial) +       20    0.020    0.001    0.020    0.001 profilee.py:48(mul) +        2    0.040    0.020    0.600    0.300 profilee.py:55(helper) +        4    0.116    0.029    0.120    0.030 profilee.py:73(helper1) +        2    0.000    0.000    0.140    0.070 profilee.py:84(helper2_indirect) +        8    0.312    0.039    0.400    0.050 profilee.py:88(helper2) +        8    0.064    0.008    0.080    0.010 profilee.py:98(subhelper) +       12    0.000    0.000    0.012    0.001 {hasattr} +        4    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects} +        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects} +        8    0.000    0.000    0.000    0.000 {range} +        4    0.000    0.000    0.000    0.000 {sys.exc_info} + + +""" +CProfileTest.expected_output['print_callers'] = """\ +   Ordered by: standard name + +Function                                          was called by... +                                                      ncalls  tottime  cumtime +<string>:1(<module>)                              <- +profilee.py:110(__getattr__)                      <-      16    0.016    0.016  profilee.py:98(subhelper) +                                                          12    0.012    0.012  {hasattr} +profilee.py:25(testfunc)                          <-       1    0.270    1.000  <string>:1(<module>) +profilee.py:35(factorial)                         <-       1    0.014    0.130  profilee.py:25(testfunc) +                                                        20/3    0.130    0.147  profilee.py:35(factorial) +                                                           2    0.006    0.040  profilee.py:84(helper2_indirect) +profilee.py:48(mul)                               <-      20    0.020    0.020  profilee.py:35(factorial) +profilee.py:55(helper)                            <-       2    0.040    0.600  profilee.py:25(testfunc) +profilee.py:73(helper1)                           <-       4    0.116    0.120  profilee.py:55(helper) +profilee.py:84(helper2_indirect)                  <-       2    0.000    0.140  profilee.py:55(helper) +profilee.py:88(helper2)                           <-       6    0.234    0.300  profilee.py:55(helper) +                                                           2    0.078    0.100  profilee.py:84(helper2_indirect) +profilee.py:98(subhelper)                         <-       8    0.064    0.080  profilee.py:88(helper2) +{hasattr}                                         <-       4    0.000    0.004  profilee.py:73(helper1) +                                                           8    0.000    0.008  profilee.py:88(helper2) +{method 'append' of 'list' objects}               <-       4    0.000    0.000  profilee.py:73(helper1) +{method 'disable' of '_lsprof.Profiler' objects}  <- +{range}                                           <-       8    0.000    0.000  profilee.py:98(subhelper) +{sys.exc_info}                                    <-       4    0.000    0.000  profilee.py:73(helper1) + + +""" +CProfileTest.expected_output['print_callees'] = """\ +   Ordered by: standard name + +Function                                          called... +                                                      ncalls  tottime  cumtime +<string>:1(<module>)                              ->       1    0.270    1.000  profilee.py:25(testfunc) +profilee.py:110(__getattr__)                      -> +profilee.py:25(testfunc)                          ->       1    0.014    0.130  profilee.py:35(factorial) +                                                           2    0.040    0.600  profilee.py:55(helper) +profilee.py:35(factorial)                         ->    20/3    0.130    0.147  profilee.py:35(factorial) +                                                          20    0.020    0.020  profilee.py:48(mul) +profilee.py:48(mul)                               -> +profilee.py:55(helper)                            ->       4    0.116    0.120  profilee.py:73(helper1) +                                                           2    0.000    0.140  profilee.py:84(helper2_indirect) +                                                           6    0.234    0.300  profilee.py:88(helper2) +profilee.py:73(helper1)                           ->       4    0.000    0.004  {hasattr} +                                                           4    0.000    0.000  {method 'append' of 'list' objects} +                                                           4    0.000    0.000  {sys.exc_info} +profilee.py:84(helper2_indirect)                  ->       2    0.006    0.040  profilee.py:35(factorial) +                                                           2    0.078    0.100  profilee.py:88(helper2) +profilee.py:88(helper2)                           ->       8    0.064    0.080  profilee.py:98(subhelper) +                                                           8    0.000    0.008  {hasattr} +profilee.py:98(subhelper)                         ->      16    0.016    0.016  profilee.py:110(__getattr__) +                                                           8    0.000    0.000  {range} +{hasattr}                                         ->      12    0.012    0.012  profilee.py:110(__getattr__) +{method 'append' of 'list' objects}               -> +{method 'disable' of '_lsprof.Profiler' objects}  -> +{range}                                           -> +{sys.exc_info}                                    -> + + +"""  if __name__ == "__main__": -    test_main() +    main() | 
