summaryrefslogtreecommitdiff
path: root/src/Tests/Performance.py
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@monkeypox.org>2009-09-20 00:39:28 -0700
committerR. Tyler Ballance <tyler@monkeypox.org>2009-09-20 00:39:28 -0700
commit83be958392d3a4a60d82ad95c890d8efb785e6dc (patch)
treeaf24729be0b57604ae5d16d36265af9e6a92f1bd /src/Tests/Performance.py
parentd6cc8d39f8248182590cdb1bcf56d0e477dbd6b9 (diff)
parent9b6fc119f8ebc83909b83644eff3e339a1535983 (diff)
downloadpython-cheetah-83be958392d3a4a60d82ad95c890d8efb785e6dc.tar.gz
Merge branch 'master' into next
Diffstat (limited to 'src/Tests/Performance.py')
-rw-r--r--src/Tests/Performance.py220
1 files changed, 0 insertions, 220 deletions
diff --git a/src/Tests/Performance.py b/src/Tests/Performance.py
deleted file mode 100644
index db721f9..0000000
--- a/src/Tests/Performance.py
+++ /dev/null
@@ -1,220 +0,0 @@
-#!/usr/bin/env python
-
-import Cheetah.NameMapper
-import Cheetah.Template
-from Cheetah.Utils import statprof
-
-import os
-import sys
-import unittest
-
-from test import pystone
-import time
-
-# This can be turned on with the `--debug` flag when running the test
-# and will cause the tests to all just dump out how long they took
-# insteasd of asserting on duration
-DEBUG = False
-
-# TOLERANCE in Pystones
-kPS = 1000
-TOLERANCE = 0.5*kPS
-
-class DurationError(AssertionError):
- pass
-
-_pystone_calibration_mark = None
-def _pystone_calibration():
- global _pystone_calibration_mark
- if not _pystone_calibration_mark:
- _pystone_calibration_mark = pystone.pystones(loops=pystone.LOOPS)
- return _pystone_calibration_mark
-
-def perftest(max_num_pystones, current_pystone=None):
- '''
- Performance test decorator based off the 'timedtest'
- decorator found in this Active State recipe:
- http://code.activestate.com/recipes/440700/
- '''
- if not isinstance(max_num_pystones, float):
- max_num_pystones = float(max_num_pystones)
-
- if not current_pystone:
- current_pystone = _pystone_calibration()
-
- def _test(function):
- def wrapper(*args, **kw):
- start_time = time.time()
- try:
- return function(*args, **kw)
- finally:
- total_time = time.time() - start_time
- if total_time == 0:
- pystone_total_time = 0
- else:
- pystone_rate = current_pystone[0] / current_pystone[1]
- pystone_total_time = total_time / pystone_rate
- global DEBUG
- if DEBUG:
- print 'The test "%s" took: %s pystones' % (function.func_name,
- pystone_total_time)
- else:
- if pystone_total_time > (max_num_pystones + TOLERANCE):
- raise DurationError((('Test too long (%.2f Ps, '
- 'need at most %.2f Ps)')
- % (pystone_total_time,
- max_num_pystones)))
- return wrapper
- return _test
-
-
-class DynamicTemplatePerformanceTest(unittest.TestCase):
- loops = 10
- @perftest(1200)
- def test_BasicDynamic(self):
- template = '''
- #def foo(arg1, arg2)
- #pass
- #end def
- '''
- for i in xrange(self.loops):
- klass = Cheetah.Template.Template.compile(template)
- assert klass
-
-class PerformanceTest(unittest.TestCase):
- iterations = 1000000
- display = False
- def setUp(self):
- super(PerformanceTest, self).setUp()
- statprof.start()
-
- def runTest(self):
- for i in xrange(self.iterations):
- if hasattr(self, 'performanceSample'):
- self.display = True
- self.performanceSample()
-
- def tearDown(self):
- super(PerformanceTest, self).tearDown()
- statprof.stop()
- if self.display:
- print '>>> %s (%d iterations) ' % (self.__class__.__name__,
- self.iterations)
- statprof.display()
-
-class DynamicMethodCompilationTest(PerformanceTest):
- def performanceSample(self):
- template = '''
- #import sys
- #import os
- #def testMethod()
- #set foo = [1, 2, 3, 4]
- #return $foo[0]
- #end def
- '''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
- template = template()
- value = template.testMethod()
-
-class DynamicSimpleCompilationTest(PerformanceTest):
- def performanceSample(self):
- template = '''
- #import sys
- #import os
- #set foo = [1,2,3,4]
-
- Well hello there! This is basic.
-
- Here's an array too: $foo
- '''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
- template = template()
- template = unicode(template)
-
-
-class FilterTest(PerformanceTest):
- template = None
- def setUp(self):
- super(FilterTest, self).setUp()
- template = '''
- #import sys
- #import os
- #set foo = [1, 2, 3, 4]
-
- $foo, $foo, $foo
- '''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
- self.template = template()
-
- def performanceSample(self):
- value = unicode(self.template)
-
-
-class LongCompileTest(PerformanceTest):
- ''' Test the compilation on a sufficiently large template '''
- def compile(self, template):
- return Cheetah.Template.Template.compile(template, keepRefToGeneratedCode=False)
-
- def performanceSample(self):
- template = '''
- #import sys
- #import Cheetah.Template
-
- #extends Cheetah.Template.Template
-
- #def header()
- <center><h2>This is my header</h2></center>
- #end def
-
- #def footer()
- #return "Huzzah"
- #end def
-
- #def scripts()
- #pass
- #end def
-
- #def respond()
- <html>
- <head>
- <title>${title}</title>
-
- $scripts()
- </head>
- <body>
- $header()
-
- #for $i in $xrange(10)
- This is just some stupid page!
- <br/>
- #end for
-
- <br/>
- $footer()
- </body>
- </html>
- #end def
-
- '''
- return self.compile(template)
-
-class LongCompile_CompilerSettingsTest(LongCompileTest):
- def compile(self, template):
- return Cheetah.Template.Template.compile(template, keepRefToGeneratedCode=False,
- compilerSettings={'useStackFrames' : True, 'useAutocalling' : True})
-
-class LongCompileAndRun(LongCompileTest):
- def performanceSample(self):
- template = super(LongCompileAndRun, self).performanceSample()
- template = template(searchList=[{'title' : 'foo'}])
- template = template.respond()
-
-
-if __name__ == '__main__':
- if '--debug' in sys.argv:
- DEBUG = True
- sys.argv = [arg for arg in sys.argv if not arg == '--debug']
- unittest.main()