From 2b58df4523407a5cc3f2ba09a16d8c0e5ff0f6f3 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Mon, 20 Jul 2009 15:40:26 -0700 Subject: [PATCH] Profiling test --- tests/run/profile_test.pyx | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 tests/run/profile_test.pyx diff --git a/tests/run/profile_test.pyx b/tests/run/profile_test.pyx new file mode 100644 index 00000000..db433a5e --- /dev/null +++ b/tests/run/profile_test.pyx @@ -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 -- 2.26.2