roverdevkit / tests /test_architecture.py
jjreif's picture
Deploy roverdevkit @ 2676a67
b3d14e3
Raw
History Blame Contribute Delete
1.95 kB
"""Tests for the mobility-architecture proxy."""
from __future__ import annotations
import pytest
from roverdevkit.architecture import (
architecture_suspension_mass_kg,
obstacle_capability_m,
obstacle_margin_m,
obstacle_requirement_met,
wheel_count_for_architecture,
)
from roverdevkit.mass.parametric_mers import estimate_mass_from_design
from roverdevkit.schema import DesignVector
def test_wheel_count_for_architecture() -> None:
assert wheel_count_for_architecture("rigid_4wheel") == 4
assert wheel_count_for_architecture("rocker_bogie_6wheel") == 6
def test_obstacle_capability_scales_with_architecture() -> None:
rigid = obstacle_capability_m("rigid_4wheel", 0.10)
rocker = obstacle_capability_m("rocker_bogie_6wheel", 0.10)
assert rocker > rigid
assert rigid == pytest.approx(0.05)
assert rocker == pytest.approx(0.125)
def test_rocker_bogie_adds_suspension_mass() -> None:
design = DesignVector(
mobility_architecture="rocker_bogie_6wheel",
wheel_radius_m=0.1,
wheel_width_m=0.06,
grouser_height_m=0.005,
grouser_count=12,
n_wheels=6,
chassis_mass_kg=10.0,
wheelbase_m=0.5,
solar_area_m2=0.4,
battery_capacity_wh=100.0,
avionics_power_w=15.0,
peak_wheel_torque_nm=1.5,
)
rigid = design.model_copy(
update={"mobility_architecture": "rigid_4wheel", "n_wheels": 4}
)
m_rocker = estimate_mass_from_design(design).total_kg
m_rigid = estimate_mass_from_design(rigid).total_kg
assert m_rocker > m_rigid
assert architecture_suspension_mass_kg("rocker_bogie_6wheel", 10.0) > 0.0
def test_obstacle_margin_and_requirement() -> None:
cap = obstacle_capability_m("rigid_4wheel", 0.20)
assert obstacle_margin_m(cap, 0.05) == pytest.approx(cap - 0.05)
assert obstacle_requirement_met(cap, 0.05)
assert not obstacle_requirement_met(cap, cap + 0.01)