> python -m unittest -v

test_dissipative_energy_balance (test_planner.SizingTests.test_dissipative_energy_balance) ... ok
test_dwell_changes_rms_not_energy (test_planner.SizingTests.test_dwell_changes_rms_not_energy) ... ok
test_efficiency_sign (test_planner.SizingTests.test_efficiency_sign) ... ok
test_invalid_axis (test_planner.SizingTests.test_invalid_axis) ... ok
test_lossless_energy_balance (test_planner.SizingTests.test_lossless_energy_balance) ... ok
test_peak_matches_dense_sample (test_planner.SizingTests.test_peak_matches_dense_sample) ... ok
test_quadrature_independent_integral (test_planner.SizingTests.test_quadrature_independent_integral) ... ok
test_signed_duty_symmetry (test_planner.SizingTests.test_signed_duty_symmetry) ... ok
test_zero_cycle (test_planner.SizingTests.test_zero_cycle) ... ok
test_acceleration_limited (test_planner.TrajectoryTests.test_acceleration_limited) ... ok
test_breakpoint_continuity (test_planner.TrajectoryTests.test_breakpoint_continuity) ... ok
test_derivatives (test_planner.TrajectoryTests.test_derivatives) ... ok
test_full_profile (test_planner.TrajectoryTests.test_full_profile) ... ok
test_invalid_limits (test_planner.TrajectoryTests.test_invalid_limits) ... ok
test_parameter_grid_limits (test_planner.TrajectoryTests.test_parameter_grid_limits) ... ok
test_signed_symmetry (test_planner.TrajectoryTests.test_signed_symmetry) ... ok
test_time_bounds_and_resource_limit (test_planner.TrajectoryTests.test_time_bounds_and_resource_limit) ... ok
test_triangular_closed_form (test_planner.TrajectoryTests.test_triangular_closed_form) ... ok
test_velocity_limited (test_planner.TrajectoryTests.test_velocity_limited) ... ok
test_zero (test_planner.TrajectoryTests.test_zero) ... ok

----------------------------------------------------------------------
Ran 20 tests in 0.172s

OK

> python complete_validation.py
{
  "passed": true,
  "checks": 15,
  "tracking": [
    {
      "bandwidth_hz": 35,
      "damping_ratio": 0.75,
      "peak_following_error_mm": 0.04991720150532286,
      "accepted": true,
      "expected": "accepted"
    },
    {
      "bandwidth_hz": 25,
      "damping_ratio": 0.75,
      "peak_following_error_mm": 0.09806687745672962,
      "accepted": true,
      "expected": "accepted"
    },
    {
      "bandwidth_hz": 8,
      "damping_ratio": 0.75,
      "peak_following_error_mm": 0.9709794229880528,
      "accepted": false,
      "expected": "rejected"
    }
  ]
}


