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