3D / voxel unit tests
This commit is contained in:
parent
e12e80e511
commit
71cd2b9b41
22 changed files with 4705 additions and 0 deletions
80
tests/unit/skeleton_test.py
Normal file
80
tests/unit/skeleton_test.py
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
# skeleton_test.py - Unit tests for skeletal animation in Model3D
|
||||
|
||||
import mcrfpy
|
||||
import sys
|
||||
|
||||
def test_model_skeleton_default():
|
||||
"""Test that procedural models don't have skeletons"""
|
||||
cube = mcrfpy.Model3D.cube(1.0)
|
||||
|
||||
assert cube.has_skeleton == False, f"Expected cube.has_skeleton=False, got {cube.has_skeleton}"
|
||||
assert cube.bone_count == 0, f"Expected cube.bone_count=0, got {cube.bone_count}"
|
||||
assert cube.animation_clips == [], f"Expected empty animation_clips, got {cube.animation_clips}"
|
||||
|
||||
print("[PASS] test_model_skeleton_default")
|
||||
|
||||
def test_model_animation_clips_empty():
|
||||
"""Test that models without skeleton have no animation clips"""
|
||||
sphere = mcrfpy.Model3D.sphere(0.5)
|
||||
|
||||
clips = sphere.animation_clips
|
||||
assert isinstance(clips, list), f"Expected list, got {type(clips)}"
|
||||
assert len(clips) == 0, f"Expected 0 clips, got {len(clips)}"
|
||||
|
||||
print("[PASS] test_model_animation_clips_empty")
|
||||
|
||||
def test_model_properties():
|
||||
"""Test Model3D skeleton-related property access"""
|
||||
plane = mcrfpy.Model3D.plane(2.0, 2.0)
|
||||
|
||||
# These should all work without error
|
||||
_ = plane.has_skeleton
|
||||
_ = plane.bone_count
|
||||
_ = plane.animation_clips
|
||||
_ = plane.name
|
||||
_ = plane.vertex_count
|
||||
_ = plane.triangle_count
|
||||
_ = plane.mesh_count
|
||||
_ = plane.bounds
|
||||
|
||||
print("[PASS] test_model_properties")
|
||||
|
||||
def test_model_repr_no_skeleton():
|
||||
"""Test Model3D repr for non-skeletal model"""
|
||||
cube = mcrfpy.Model3D.cube()
|
||||
r = repr(cube)
|
||||
|
||||
assert "Model3D" in r, f"Expected 'Model3D' in repr, got {r}"
|
||||
assert "skeletal" not in r, f"Non-skeletal model should not say 'skeletal' in repr"
|
||||
|
||||
print("[PASS] test_model_repr_no_skeleton")
|
||||
|
||||
def run_all_tests():
|
||||
"""Run all skeleton tests"""
|
||||
tests = [
|
||||
test_model_skeleton_default,
|
||||
test_model_animation_clips_empty,
|
||||
test_model_properties,
|
||||
test_model_repr_no_skeleton,
|
||||
]
|
||||
|
||||
passed = 0
|
||||
failed = 0
|
||||
|
||||
for test in tests:
|
||||
try:
|
||||
test()
|
||||
passed += 1
|
||||
except AssertionError as e:
|
||||
print(f"[FAIL] {test.__name__}: {e}")
|
||||
failed += 1
|
||||
except Exception as e:
|
||||
print(f"[ERROR] {test.__name__}: {e}")
|
||||
failed += 1
|
||||
|
||||
print(f"\n=== Results: {passed} passed, {failed} failed ===")
|
||||
return failed == 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = run_all_tests()
|
||||
sys.exit(0 if success else 1)
|
||||
Loading…
Add table
Add a link
Reference in a new issue