novaplan-decentralized-priv.../tests/test_core.py

38 lines
1.2 KiB
Python

import time
from nova_plan.planner import LocalProblem, simple_admm_step
from nova_plan.contracts import PlanDelta
from nova_plan.ledger import Ledger
def test_local_problem_evaluation_and_admm_step():
# Simple local problem: minimize (x - s)^2 with x in [0, 10], shared_var s
def objective(local_vars, shared):
x = local_vars.get("x", 0.0)
s = shared.get("x", 0.0)
return (x - s) ** 2
lp = LocalProblem(id="agent-1", objective=objective, variables={"x": 5.0}, constraints={"min": 0, "max": 10})
shared = {"x": 7.0}
# Evaluate
val = lp.evaluate(shared)
assert isinstance(val, float)
# Perform a few ADMM-like steps
for _ in range(3):
simple_admm_step(lp, shared, rho=1.0)
assert isinstance(lp.variables["x"], float)
def test_plan_delta_serialization():
pd = PlanDelta(agent_id="agent-1", delta={"x": 1.0}, timestamp=time.time())
s = pd.to_json() if hasattr(pd, "to_json") else None
assert s is not None
def test_ledger_logging_and_anchor():
ledger = Ledger()
e = ledger.log("decision", "alloc-1", anchor="ground-link-001")
assert e.anchor == "ground-link-001"
assert ledger.last_anchor() == "ground-link-001"