this repo has no description
1import random
2from atmst.all import MemoryBlockStore, NodeStore, NodeWrangler, mst_diff, very_slow_mst_diff
3from cbrrr import CID
4import time
5
6PERF_BENCH = False
7
8def random_test():
9 bs = MemoryBlockStore()
10 ns = NodeStore(bs)
11 nw = NodeWrangler(ns)
12 root = ns.get_node(None).cid
13 keys = []
14 for _ in range(10240 if PERF_BENCH else random.randrange(0, 32)):
15 k = random.randbytes(8).hex()
16 keys.append(k)
17 root = nw.put_record(root, k, CID.cidv1_dag_cbor_sha256_32_from(random.randbytes(8)))
18 root_a = root
19 for _ in range(8 if PERF_BENCH else random.randrange(0, 8)):
20 # some random additions
21 root = nw.put_record(root, random.randbytes(8).hex(), CID.cidv1_dag_cbor_sha256_32_from(random.randbytes(8)))
22 if keys:
23 # some random modifications
24 for _ in range(4 if PERF_BENCH else random.randrange(0, 4)):
25 for k in random.choice(keys):
26 root = nw.put_record(root, k, CID.cidv1_dag_cbor_sha256_32_from(random.randbytes(8)))
27 # some random deletions
28 for _ in range(4 if PERF_BENCH else random.randrange(0, 4)):
29 for k in random.choice(keys):
30 root = nw.del_record(root, k)
31
32 diff_start = time.time()
33 c, d = mst_diff(ns, root_a, root)
34 #c, d = very_slow_mst_diff(ns, root_a, root)
35 diff_duration = time.time()-diff_start
36 e, f = mst_diff(ns, root, root_a)
37 assert(c == f) # compare with reverse
38 assert(e == d) # compare with reverse
39 g, h = very_slow_mst_diff(ns, root_a, root)
40 assert(c == g) # compare with known-good
41 assert(d == h) # compare with known-good
42 return diff_duration
43
44if __name__ == "__main__":
45 duration = 0
46 for _ in range(1 if PERF_BENCH else 2000):
47 duration += random_test()
48 print("time spent diffing (ms):", duration*1000)