Safety improvements: - Generation counter detects stale BSPNode references after clear()/split_recursive() - GRID_MAX validation prevents oversized BSP trees - Depth parameter capped at 16 to prevent resource exhaustion - Iterator checks generation to detect invalidation during mutation API improvements: - Changed constructor from bounds=((x,y),(w,h)) to pos=(x,y), size=(w,h) - Added pos and size properties alongside bounds - BSPNode __eq__ compares underlying pointers for identity - BSP __iter__ as shorthand for leaves() - BSP __len__ returns leaf count Tests: - Added tests for stale node detection, GRID_MAX validation, depth cap - Added tests for __len__, __iter__, and BSPNode equality Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
28 lines
622 B
Python
28 lines
622 B
Python
"""Simple BSP test to identify crash."""
|
|
import sys
|
|
import mcrfpy
|
|
|
|
print("Step 1: Import complete")
|
|
|
|
print("Step 2: Creating BSP...")
|
|
bsp = mcrfpy.BSP(pos=(0, 0), size=(100, 80))
|
|
print("Step 2: BSP created:", bsp)
|
|
|
|
print("Step 3: Getting bounds...")
|
|
bounds = bsp.bounds
|
|
print("Step 3: Bounds:", bounds)
|
|
|
|
print("Step 4: Getting root...")
|
|
root = bsp.root
|
|
print("Step 4: Root:", root)
|
|
|
|
print("Step 5: Split once...")
|
|
bsp.split_once(horizontal=True, position=40)
|
|
print("Step 5: Split complete")
|
|
|
|
print("Step 6: Get leaves...")
|
|
leaves = list(bsp.leaves())
|
|
print("Step 6: Leaves count:", len(leaves))
|
|
|
|
print("PASS")
|
|
sys.exit(0)
|