-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbintrie_test.py
50 lines (45 loc) · 1.25 KB
/
bintrie_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import new_bintrie as t1
import new_bintrie_optimized as t2
import new_bintrie_hex as t3
import time
import binascii
keys = [t1.sha3(bytes([i // 256, i % 256])) for i in range(10000)]
d = t1.EphemDB()
r = t1.new_tree(d)
a = time.time()
for k in keys[:1000]:
r = t1.update(d, r, k, k)
print("Naive bintree time to update: %.4f" % (time.time() - a))
print("Root: %s" % binascii.hexlify(r))
print()
print()
d = t2.EphemDB()
r = t2.new_tree(d)
a = time.time()
for k in keys[:1000]:
r = t2.update(d, r, k, k)
print("DB-optimized bintree time to update: %.4f" % (time.time() - a))
print("Root: %s" % binascii.hexlify(r))
print("Writes: %d, reads: %d" % (d.writes, d.reads))
d.reads = 0
for k in keys[:500]:
assert t2.get(d, r, k) == k
for k in keys[-500:]:
assert t2.get(d, r, k) == b'\x00' * 32
print("Reads: %d" % d.reads)
print()
print()
d = t3.EphemDB()
r = t3.new_tree(d)
a = time.time()
for k in keys[:1000]:
r = t3.update(d, r, k, k)
print("DB-optimized bintree time to update: %.4f" % (time.time() - a))
print("Root: %s" % binascii.hexlify(r))
print("Writes: %d, reads: %d" % (d.writes, d.reads))
d.reads = 0
for k in keys[:500]:
assert t3.get(d, r, k) == k
for k in keys[-500:]:
assert t3.get(d, r, k) == b'\x00' * 32
print("Reads: %d" % d.reads)