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

Class TestMemoryLeaks

python/tests/test_memory_leaks.py:18–267  ·  view source on GitHub ↗

Test for memory leaks in various operations.

Source from the content-addressed store, hash-verified

16
17@pytest.mark.slow
18class TestMemoryLeaks:
19 """Test for memory leaks in various operations."""
20
21 def test_insertion_deletion_cycle_no_leak(self):
22 """Test that insertion/deletion cycles don't leak memory."""
23 tree = BPlusTreeMap()
24
25 # Track object count before operations
26 gc.collect()
27 initial_objects = len(gc.get_objects())
28
29 # Perform multiple insertion/deletion cycles (reduced for CI)
30 for cycle in range(3):
31 # Insert items (reduced count for CI)
32 for i in range(500):
33 tree[i] = f"value_{i}_{cycle}"
34
35 # Delete all items
36 for i in range(500):
37 del tree[i]
38
39 # Force garbage collection
40 gc.collect()
41 final_objects = len(gc.get_objects())
42
43 # Object count should not grow significantly
44 # Allow some variance for internal Python operations
45 growth = final_objects - initial_objects
46 assert (
47 growth < 50
48 ), f"MEMORY LEAK DETECTED: {growth} new objects after cycles (threshold: 50)"
49
50 def test_deleted_values_are_released(self):
51 """Test that deleted values are properly released."""
52 tree = BPlusTreeMap()
53
54 # Create objects that we can track
55 class TrackedObject:
56 def __init__(self, value):
57 self.value = value
58
59 # Insert tracked objects
60 objects = []
61 weak_refs = []
62 for i in range(100):
63 obj = TrackedObject(f"value_{i}")
64 objects.append(obj)
65 weak_refs.append(weakref.ref(obj))
66 tree[i] = obj
67
68 # Clear our references but keep weak references
69 objects.clear()
70
71 # Delete from tree
72 for i in range(100):
73 del tree[i]
74
75 # Force garbage collection

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected