MCPcopy Create free account
hub / github.com/KentBeck/BPlusTree3 / PerformanceComparison

Class PerformanceComparison

python/tests/test_performance_vs_sorteddict.py:28–139  ·  view source on GitHub ↗

Compare B+ Tree and SortedDict performance.

Source from the content-addressed store, hash-verified

26
27
28class PerformanceComparison:
29 """Compare B+ Tree and SortedDict performance."""
30
31 def __init__(self, size: int = 10000):
32 self.size = size
33 self.keys = list(range(size))
34 self.random_keys = self.keys.copy()
35 random.shuffle(self.random_keys)
36
37 def measure_operation(self, operation, iterations: int = 1) -> float:
38 """Measure operation time and return per-operation time in nanoseconds."""
39 gc.collect()
40 gc.disable()
41
42 start = time.perf_counter()
43 for _ in range(iterations):
44 operation()
45 end = time.perf_counter()
46
47 gc.enable()
48 total_time = end - start
49 return (total_time * 1e9) / (iterations * self.size)
50
51 def compare_lookup(self) -> Dict[str, float]:
52 """Compare lookup performance."""
53 # Build both structures
54 btree = BPlusTreeMap(capacity=128)
55 sdict = SortedDict()
56
57 for key in self.keys:
58 btree[key] = key * 2
59 sdict[key] = key * 2
60
61 # Measure B+ Tree lookup
62 def btree_lookup():
63 for key in self.random_keys:
64 _ = btree[key]
65
66 btree_time = self.measure_operation(btree_lookup, 10)
67
68 # Measure SortedDict lookup
69 def sdict_lookup():
70 for key in self.random_keys:
71 _ = sdict[key]
72
73 sdict_time = self.measure_operation(sdict_lookup, 10)
74
75 return {
76 "btree_ns": btree_time,
77 "sorteddict_ns": sdict_time,
78 "ratio": btree_time / sdict_time if sdict_time > 0 else float("inf"),
79 }
80
81 def compare_insert(self) -> Dict[str, float]:
82 """Compare insertion performance."""
83
84 # Random insert
85 def btree_insert():

Callers 1

Calls

no outgoing calls

Tested by 1