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