idea182-implementation/tests/test_adapters_solver.py

37 lines
1.1 KiB
Python

from gravityweave.adapters.sat_planner import create as create_sat
from gravityweave.adapters.relay_module import create as create_relay
from gravityweave.plan_delta import PlanDelta
from gravityweave.solver import ADMMNode
def test_sat_planner_apply_burn():
sat = create_sat("satA")
pd = PlanDelta()
pd.commitments.add({"type": "burn", "fuel": 10})
ok = sat.apply_delta(pd)
assert ok is True
# fuel should be deducted
state = sat.describe_local_problem()["state"]
assert state["fuel"] == 90.0
def test_relay_accept_downlink():
r = create_relay("relay1")
pd = PlanDelta()
pd.commitments.add({"type": "downlink", "window": "T1"})
ok = r.apply_delta(pd)
assert ok is True
assert len(r.schedule) == 1
def test_admm_node_step():
node = ADMMNode("n1")
initial = node.local_x
z = 8.0
x_new = node.step(z)
# check that local_x updated and dual updated
assert node.local_x == x_new
assert isinstance(node.dual, float)
# value should be finite and reasonable
assert 0.0 <= x_new <= 20.0