3D / voxel unit tests
This commit is contained in:
parent
e12e80e511
commit
71cd2b9b41
22 changed files with 4705 additions and 0 deletions
98
tests/unit/animated_model_test.py
Normal file
98
tests/unit/animated_model_test.py
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
# animated_model_test.py - Test loading actual animated glTF models
|
||||
# Tests skeleton and animation data loading from real files
|
||||
|
||||
import mcrfpy
|
||||
import sys
|
||||
import os
|
||||
|
||||
def test_rigged_simple():
|
||||
"""Test loading RiggedSimple - a cylinder with 2 bones"""
|
||||
print("Loading RiggedSimple.glb...")
|
||||
model = mcrfpy.Model3D("../assets/models/RiggedSimple.glb")
|
||||
|
||||
print(f" has_skeleton: {model.has_skeleton}")
|
||||
print(f" bone_count: {model.bone_count}")
|
||||
print(f" animation_clips: {model.animation_clips}")
|
||||
print(f" vertex_count: {model.vertex_count}")
|
||||
print(f" triangle_count: {model.triangle_count}")
|
||||
print(f" mesh_count: {model.mesh_count}")
|
||||
|
||||
assert model.has_skeleton == True, f"Expected has_skeleton=True, got {model.has_skeleton}"
|
||||
assert model.bone_count > 0, f"Expected bone_count > 0, got {model.bone_count}"
|
||||
assert len(model.animation_clips) > 0, f"Expected animation clips, got {model.animation_clips}"
|
||||
|
||||
print("[PASS] test_rigged_simple")
|
||||
|
||||
def test_cesium_man():
|
||||
"""Test loading CesiumMan - animated humanoid figure"""
|
||||
print("Loading CesiumMan.glb...")
|
||||
model = mcrfpy.Model3D("../assets/models/CesiumMan.glb")
|
||||
|
||||
print(f" has_skeleton: {model.has_skeleton}")
|
||||
print(f" bone_count: {model.bone_count}")
|
||||
print(f" animation_clips: {model.animation_clips}")
|
||||
print(f" vertex_count: {model.vertex_count}")
|
||||
print(f" triangle_count: {model.triangle_count}")
|
||||
print(f" mesh_count: {model.mesh_count}")
|
||||
|
||||
assert model.has_skeleton == True, f"Expected has_skeleton=True, got {model.has_skeleton}"
|
||||
assert model.bone_count > 0, f"Expected bone_count > 0, got {model.bone_count}"
|
||||
assert len(model.animation_clips) > 0, f"Expected animation clips, got {model.animation_clips}"
|
||||
|
||||
print("[PASS] test_cesium_man")
|
||||
|
||||
def test_entity_with_animated_model():
|
||||
"""Test Entity3D with an animated model attached"""
|
||||
print("Testing Entity3D with animated model...")
|
||||
|
||||
model = mcrfpy.Model3D("../assets/models/RiggedSimple.glb")
|
||||
entity = mcrfpy.Entity3D()
|
||||
entity.model = model
|
||||
|
||||
# Check animation clips are available
|
||||
clips = model.animation_clips
|
||||
print(f" Available clips: {clips}")
|
||||
|
||||
if clips:
|
||||
# Set animation clip
|
||||
entity.anim_clip = clips[0]
|
||||
assert entity.anim_clip == clips[0], f"Expected clip '{clips[0]}', got '{entity.anim_clip}'"
|
||||
|
||||
# Test animation time progression
|
||||
entity.anim_time = 0.5
|
||||
assert abs(entity.anim_time - 0.5) < 0.001, f"Expected anim_time~=0.5, got {entity.anim_time}"
|
||||
|
||||
# Test speed
|
||||
entity.anim_speed = 2.0
|
||||
assert abs(entity.anim_speed - 2.0) < 0.001, f"Expected anim_speed~=2.0, got {entity.anim_speed}"
|
||||
|
||||
print("[PASS] test_entity_with_animated_model")
|
||||
|
||||
def run_all_tests():
|
||||
"""Run all animated model tests"""
|
||||
tests = [
|
||||
test_rigged_simple,
|
||||
test_cesium_man,
|
||||
test_entity_with_animated_model,
|
||||
]
|
||||
|
||||
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