Files
impakt/tests/test_criteria/test_hic.py
2026-04-10 14:37:34 -04:00

56 lines
1.9 KiB
Python

"""Tests for HIC calculation."""
import numpy as np
import pytest
from impakt.criteria.hic import hic, hic15, hic36
class TestHIC:
def test_hic15_computation(self, head_group):
result = hic(head_group, window_ms=15)
assert result.criterion == "HIC15"
assert result.value > 0
assert result.window is not None
t1, t2 = result.window
assert 0 <= (t2 - t1) <= 0.015 + 1e-6 # Window <= 15ms
def test_hic36_computation(self, head_group):
result = hic(head_group, window_ms=36)
assert result.criterion == "HIC36"
assert result.value > 0
def test_hic36_gte_hic15(self, head_group):
"""HIC36 should always be >= HIC15 (larger search window)."""
h15 = hic(head_group, window_ms=15)
h36 = hic(head_group, window_ms=36)
assert h36.value >= h15.value - 1e-6 # Small tolerance for numerical issues
def test_hic_from_single_channel(self, head_accel_x):
# Just X component as a simple test
result = hic(head_accel_x, window_ms=15)
assert result.value > 0
def test_hic_body_region(self, head_group):
result = hic(head_group, window_ms=15)
assert result.body_region == "Head"
def test_hic_details(self, head_group):
result = hic(head_group, window_ms=15)
assert "t1" in result.details
assert "t2" in result.details
assert "window_ms" in result.details
assert result.details["window_ms"] == 15
def test_hic15_convenience(self, head_group):
result = hic15(head_group)
assert result.criterion == "HIC15"
def test_hic36_convenience(self, head_group):
result = hic36(head_group)
assert result.criterion == "HIC36"
def test_invalid_window(self, head_group):
with pytest.raises(ValueError, match="15 or 36"):
hic(head_group, window_ms=20)