Profiling test
authorRobert Bradshaw <robertwb@math.washington.edu>
Mon, 20 Jul 2009 22:40:26 +0000 (15:40 -0700)
committerRobert Bradshaw <robertwb@math.washington.edu>
Mon, 20 Jul 2009 22:40:26 +0000 (15:40 -0700)
tests/run/profile_test.pyx [new file with mode: 0644]

diff --git a/tests/run/profile_test.pyx b/tests/run/profile_test.pyx
new file mode 100644 (file)
index 0000000..db433a5
--- /dev/null
@@ -0,0 +1,60 @@
+__doc__ = u"""
+    >>> import os, tempfile, cProfile as profile, pstats
+    >>> statsfile = tempfile.mkstemp()[1]
+    >>> profile.runctx("test_profile(100)", locals(), globals(), statsfile)
+    >>> s = pstats.Stats(statsfile)
+    >>> short_stats = dict([(k[2], v[1]) for k,v in s.stats.items()])
+    >>> short_stats['f_def']
+    100
+    >>> short_stats['f_cdef']
+    100
+    >>> short_stats['f_inline']
+    Traceback (most recent call last):
+    ...
+    KeyError: 'f_inline'
+    >>> short_stats['f_inline_prof']
+    100
+    >>> short_stats['f_noprof']
+    Traceback (most recent call last):
+    ...
+    KeyError: 'f_noprof'
+    >>> short_stats['f_raise']
+    100
+    >>> os.unlink(statsfile)
+"""
+
+cimport cython
+
+def test_profile(long N):
+    cdef long i, n = 0
+    for i from 0 <= i < N:
+        n += f_def(i)
+        n += f_cdef(i)
+        n += f_inline(i)
+        n += f_inline_prof(i)
+        n += f_noprof(i)
+        try:
+            n += f_raise(i+2)
+        except RuntimeError:
+            pass
+    return n
+
+def f_def(long a):
+    return a
+
+cdef long f_cdef(long a):
+    return a
+
+cdef inline long f_inline(long a):
+    return a
+
+@cython.profile(True)
+cdef inline long f_inline_prof(long a):
+    return a
+
+@cython.profile(False)
+cdef int f_noprof(long a):
+    return a
+
+cdef long f_raise(long) except -2:
+    raise RuntimeError