Ticket #2310: banana_speed.2.py

File banana_speed.2.py, 1.4 KB (added by catlee, 11 years ago)

benchmark of b1282int methods

Line 
1import twisted.spread.banana as banana
2
3import time, sys
4
5b1282int = banana.b1282int
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
26print "calls / second"
27print "%13s %10s %10s %10s" % ("string length", "original", "caching", "bitshifting")
28n = 10000
29for l in 5, 10, 11, 12, 13, 14, 15, 50, 100:
30    st = ("abcdefghijklmnopqrstuvwxyz" * l)[:l]
31    assert shifting_b1282int(st) == b1282int(st)
32    assert caching_b1282int(st) == b1282int(st)
33    assert len(st) == l
34    s = time.time()
35    for i in range(n):
36        shifting_b1282int(st)
37    e = time.time()
38    shifting_calls = float(n)/(e-s)
39
40    s = time.time()
41    for i in range(n):
42        b1282int(st)
43    e = time.time()
44    orig_calls = float(n)/(e-s)
45
46    s = time.time()
47    for i in range(n):
48        caching_b1282int(st)
49    e = time.time()
50    caching_calls = float(n)/(e-s)
51
52    print "%(l)13i %(orig_calls)10i %(caching_calls)10i %(shifting_calls)10i" % locals()