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

Class TestPerformanceRegression

python/tests/test_performance_benchmarks.py:343–407  ·  view source on GitHub ↗

Tests to detect performance regressions.

Source from the content-addressed store, hash-verified

341
342
343class TestPerformanceRegression:
344 """Tests to detect performance regressions."""
345
346 def test_baseline_insertion_performance(self):
347 """Baseline test for insertion performance regression detection."""
348 size = 10000
349 tree = BPlusTreeMap(capacity=32)
350
351 start_time = time.perf_counter()
352 for i in range(size):
353 tree[i] = f"value_{i}"
354 elapsed = time.perf_counter() - start_time
355
356 # Conservative threshold to catch major regressions
357 max_time = 2.0 # Should be much faster, but allows for slow CI environments
358 assert elapsed < max_time, f"Insertion baseline exceeded: {elapsed:.3f}s > {max_time}s"
359
360 # Store result for comparison (in real CI, this would be persisted)
361 ops_per_second = size / elapsed
362 assert ops_per_second > 2000, f"Insertion rate too low: {ops_per_second:.0f} ops/s"
363
364 def test_baseline_lookup_performance(self):
365 """Baseline test for lookup performance regression detection."""
366 size = 10000
367 tree = BPlusTreeMap(capacity=32)
368
369 # Populate tree
370 for i in range(size):
371 tree[i] = f"value_{i}"
372
373 # Test lookups
374 lookup_count = 10000
375 start_time = time.perf_counter()
376 for i in range(lookup_count):
377 _ = tree[i % size]
378 elapsed = time.perf_counter() - start_time
379
380 # Conservative threshold
381 max_time = 1.0
382 assert elapsed < max_time, f"Lookup baseline exceeded: {elapsed:.3f}s > {max_time}s"
383
384 ops_per_second = lookup_count / elapsed
385 assert ops_per_second > 5000, f"Lookup rate too low: {ops_per_second:.0f} ops/s"
386
387 def test_memory_usage_baseline(self):
388 """Baseline test for memory usage regression detection."""
389 try:
390 import tracemalloc
391 except ImportError:
392 pytest.skip("tracemalloc not available")
393
394 tracemalloc.start()
395
396 size = 10000
397 tree = BPlusTreeMap(capacity=32)
398 for i in range(size):
399 tree[i] = f"value_{i}"
400

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected