40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
import json
|
|
from catopt_graph.dsl import LocalProblem, SharedVariables, PlanDelta, DualVariables, PrivacyBudget, AuditLog, PolicyBlock, to_json
|
|
|
|
|
|
def test_local_problem_json_roundtrip():
|
|
lp = LocalProblem(
|
|
id="lp-1",
|
|
domain="energy",
|
|
assets={"battery": 2, "solar": 5},
|
|
objective={"maximize": "util"},
|
|
constraints={"budget": 100},
|
|
solver_hint="fast-convex",
|
|
)
|
|
s = lp.to_json()
|
|
assert isinstance(s, str)
|
|
lp2 = LocalProblem.from_json(s)
|
|
assert lp2.id == lp.id
|
|
assert lp2.domain == lp.domain
|
|
|
|
|
|
def test_shared_variables_json_roundtrip():
|
|
sv = SharedVariables(version="1.0.0", forecasts={"demand": 10}, priors={"mean": 0.0})
|
|
s = sv.to_json()
|
|
sv2 = SharedVariables.from_json(s)
|
|
assert sv2.version == sv.version
|
|
|
|
|
|
def test_to_json_generic():
|
|
lp = LocalProblem(
|
|
id="lp-2",
|
|
domain="robotics",
|
|
assets={"robot": "rover-1"},
|
|
objective={"minimize": "time"},
|
|
constraints=None,
|
|
)
|
|
j = to_json(lp)
|
|
# ensures a JSON string is produced and decodable
|
|
data = json.loads(j)
|
|
assert data["id"] == lp.id
|