37 lines
1.1 KiB
Python
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
|