diff options
Diffstat (limited to 'tests/benchmark.py')
-rwxr-xr-x | tests/benchmark.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/benchmark.py b/tests/benchmark.py new file mode 100755 index 0000000..d46e973 --- /dev/null +++ b/tests/benchmark.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# coding: utf-8 + +""" +A rudimentary backward- and forward-compatible script to benchmark pystache. + +Usage: + +tests/benchmark.py 10000 + +""" + +import sys +from timeit import Timer + +import pystache + +# TODO: make the example realistic. + +examples = [ + # Test case: 1 + ("""{{#person}}Hi {{name}}{{/person}}""", + {"person": {"name": "Jon"}}, + "Hi Jon"), + + # Test case: 2 + ("""\ +<div class="comments"> +<h3>{{header}}</h3> +<ul> +{{#comments}}<li class="comment"> +<h5>{{name}}</h5><p>{{body}}</p> +</li>{{/comments}} +</ul> +</div>""", + {'header': "My Post Comments", + 'comments': [ + {'name': "Joe", 'body': "Thanks for this post!"}, + {'name': "Sam", 'body': "Thanks for this post!"}, + {'name': "Heather", 'body': "Thanks for this post!"}, + {'name': "Kathy", 'body': "Thanks for this post!"}, + {'name': "George", 'body': "Thanks for this post!"}]}, + """\ +<div class="comments"> +<h3>My Post Comments</h3> +<ul> +<li class="comment"> +<h5>Joe</h5><p>Thanks for this post!</p> +</li><li class="comment"> +<h5>Sam</h5><p>Thanks for this post!</p> +</li><li class="comment"> +<h5>Heather</h5><p>Thanks for this post!</p> +</li><li class="comment"> +<h5>Kathy</h5><p>Thanks for this post!</p> +</li><li class="comment"> +<h5>George</h5><p>Thanks for this post!</p> +</li> +</ul> +</div>"""), +] + + +def make_test_function(example): + + template, context, expected = example + + def test(): + actual = pystache.render(template, context) + if actual != expected: + raise Exception("Benchmark mismatch: \n%s\n*** != ***\n%s" % (expected, actual)) + + return test + + +def main(sys_argv): + args = sys_argv[1:] + count = int(args[0]) + + print "Benchmarking: %sx" % count + print + + for example in examples: + + test = make_test_function(example) + + t = Timer(test,) + print min(t.repeat(repeat=3, number=count)) + + print "Done" + + +if __name__ == '__main__': + main(sys.argv) + |