Ticket #2310: timing-test-2310.py

File timing-test-2310.py, 1.1 KB (added by TimAllen, 11 years ago)

An alternative microbenchmark

Line 
1#!/usr/bin/python
2from time import clock
3from twisted.spread.banana import b1282int as b1282int_orig
4
5ITERATIONS=100000
6
7def shifting_b1282int(st):
8    e = 1
9    i = 0
10    for char in st:
11        n = ord(char)
12        i += (n * e)
13        e <<= 7
14    return i
15
16def caching_b1282int(st, _powersOfOneTwentyEight=[]):
17    i = 0
18    if len(st) > len(_powersOfOneTwentyEight):
19        _powersOfOneTwentyEight.extend([
20            128 ** n for n in xrange(len(_powersOfOneTwentyEight), len(st))])
21    for place, char in enumerate(st):
22        num = ord(char)
23        i = i + (num * _powersOfOneTwentyEight[place])
24    return i
25
26def timeFunc(fn, *args, **kwargs):
27        start = clock()
28        for i in xrange(ITERATIONS):
29                fn(*args, **kwargs)
30
31        return ITERATIONS, (clock() - start)
32
33funcs = {
34                "original": b1282int_orig,
35                "caching": caching_b1282int,
36                "bitshifting": shifting_b1282int,
37        }
38
39for length in (1, 5, 10, 50, 100):
40        for desc, func in funcs.items():
41                iterations, elapsed = timeFunc(func, "\xff" * length)
42                print "Function %15r, %3d byte string: %10d cps" % (
43                                desc, length, iterations / elapsed)