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/profilee.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/profilee.py')
| -rw-r--r-- | Lib/test/profilee.py | 115 | 
1 files changed, 115 insertions, 0 deletions
| diff --git a/Lib/test/profilee.py b/Lib/test/profilee.py new file mode 100644 index 0000000..6ad2c83 --- /dev/null +++ b/Lib/test/profilee.py @@ -0,0 +1,115 @@ +""" +Input for test_profile.py and test_cprofile.py. + +IMPORTANT: This stuff is touchy. If you modify anything above the +test class you'll have to regenerate the stats by running the two +test files. + +*ALL* NUMBERS in the expected output are relevant.  If you change +the formatting of pstats, please don't just regenerate the expected +output without checking very carefully that not a single number has +changed. +""" + +import sys + +# In order to have reproducible time, we simulate a timer in the global +# variable 'TICKS', which represents simulated time in milliseconds. +# (We can't use a helper function increment the timer since it would be +# included in the profile and would appear to consume all the time.) +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 | 
