bookmark - Refactor
This commit is contained in:
93
tests/test_criteria/test_chest_femur_tibia.py
Normal file
93
tests/test_criteria/test_chest_femur_tibia.py
Normal file
@@ -0,0 +1,93 @@
|
||||
"""Tests for chest deflection, femur load, tibia index, 3ms clip, viscous criterion."""
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from impakt.criteria import chest_deflection, clip_3ms, femur_load, tibia_index, viscous_criterion
|
||||
|
||||
|
||||
class TestChestDeflection:
|
||||
def test_basic(self, chest_deflection_channel):
|
||||
result = chest_deflection(channel=chest_deflection_channel)
|
||||
assert result.criterion == "Chest Deflection"
|
||||
assert result.unit == "mm"
|
||||
assert 30.0 < result.value < 40.0 # ~35mm in fixture
|
||||
|
||||
def test_peak_time(self, chest_deflection_channel):
|
||||
result = chest_deflection(channel=chest_deflection_channel)
|
||||
assert result.time_of_peak is not None
|
||||
assert 0.0 < result.time_of_peak < 0.1
|
||||
|
||||
|
||||
class TestClip3ms:
|
||||
def test_basic(self, head_accel_x):
|
||||
result = clip_3ms(head_accel_x)
|
||||
assert result.criterion == "3ms Clip"
|
||||
assert result.value > 0
|
||||
|
||||
def test_body_region(self, head_accel_x):
|
||||
result = clip_3ms(head_accel_x)
|
||||
assert result.body_region == "Chest"
|
||||
|
||||
|
||||
class TestFemurLoad:
|
||||
def test_single_channel(self, femur_left_channel):
|
||||
result = femur_load(channel=femur_left_channel, side="left")
|
||||
assert result.criterion == "Femur Load Left"
|
||||
assert result.unit == "kN"
|
||||
assert result.value > 0
|
||||
|
||||
def test_peak_time(self, femur_left_channel):
|
||||
result = femur_load(channel=femur_left_channel, side="left")
|
||||
assert result.time_of_peak is not None
|
||||
|
||||
|
||||
class TestTibiaIndex:
|
||||
def test_with_all_components(self, time_array, sample_rate):
|
||||
from impakt.channel.code import ChannelCode
|
||||
from impakt.channel.model import Channel
|
||||
|
||||
t = time_array
|
||||
fz = np.zeros_like(t)
|
||||
mx = np.zeros_like(t)
|
||||
my = np.zeros_like(t)
|
||||
mask = (t >= 0.02) & (t <= 0.08)
|
||||
fz[mask] = -5000 * np.sin(np.pi * (t[mask] - 0.02) / 0.06)
|
||||
mx[mask] = 50 * np.sin(np.pi * (t[mask] - 0.02) / 0.06)
|
||||
my[mask] = 80 * np.sin(np.pi * (t[mask] - 0.02) / 0.06)
|
||||
|
||||
fz_ch = Channel(
|
||||
name="TIBFZ",
|
||||
code=ChannelCode.parse("TIBFZ"),
|
||||
data=fz,
|
||||
time=t,
|
||||
unit="N",
|
||||
sample_rate=sample_rate,
|
||||
)
|
||||
mx_ch = Channel(
|
||||
name="TIBMX",
|
||||
code=ChannelCode.parse("TIBMX"),
|
||||
data=mx,
|
||||
time=t,
|
||||
unit="N·m",
|
||||
sample_rate=sample_rate,
|
||||
)
|
||||
my_ch = Channel(
|
||||
name="TIBMY",
|
||||
code=ChannelCode.parse("TIBMY"),
|
||||
data=my,
|
||||
time=t,
|
||||
unit="N·m",
|
||||
sample_rate=sample_rate,
|
||||
)
|
||||
|
||||
result = tibia_index(fz_channel=fz_ch, mx_channel=mx_ch, my_channel=my_ch)
|
||||
assert result.value > 0
|
||||
|
||||
|
||||
class TestViscousCriterion:
|
||||
def test_basic(self, chest_deflection_channel):
|
||||
result = viscous_criterion(channel=chest_deflection_channel)
|
||||
assert result.criterion == "Viscous Criterion"
|
||||
assert result.unit == "m/s"
|
||||
assert result.value >= 0
|
||||
Reference in New Issue
Block a user