52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
import datetime
|
|
|
|
import pytest
|
|
import os
|
|
import sys
|
|
|
|
# Ensure the local src/ package is on PYTHONPATH for tests
|
|
ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
|
SRC = os.path.join(ROOT, "src")
|
|
if SRC not in sys.path:
|
|
sys.path.insert(0, SRC)
|
|
|
|
from cosmosmesh_privacy_preserving_federated.catopt_bridge import (
|
|
LocalProblem,
|
|
SharedVariables,
|
|
DualVariables,
|
|
PlanDelta,
|
|
PrivacyBudget,
|
|
AuditLog,
|
|
GraphOfContracts,
|
|
sample_end_to_end_mapping,
|
|
)
|
|
|
|
|
|
def test_catopt_basic_dataclasses_roundtrip():
|
|
lp = LocalProblem(
|
|
id="lp-xyz",
|
|
domain="test",
|
|
assets=["a1"],
|
|
objective={"maximize": 1.0},
|
|
constraints=[{"c": 1}],
|
|
)
|
|
sv = SharedVariables(version=1)
|
|
dv = DualVariables(version=1)
|
|
_ = lp.to_catopt()
|
|
_ = sv.to_catopt()
|
|
_ = dv.to_catopt()
|
|
|
|
|
|
def test_sample_end_to_end_mapping_returns_three_catopt_dicts():
|
|
lp_dict, sv_dict, dv_dict = sample_end_to_end_mapping()
|
|
assert isinstance(lp_dict, dict) and lp_dict.get("type") == "LocalProblem"
|
|
assert isinstance(sv_dict, dict) and sv_dict.get("type") == "SharedVariables"
|
|
assert isinstance(dv_dict, dict) and dv_dict.get("type") == "DualVariables"
|
|
|
|
|
|
def test_graph_of_contracts_basic():
|
|
g = GraphOfContracts()
|
|
g.register("contract-A", {"name": "TestAdapter", "version": "0.0.1"})
|
|
items = g.list_contracts()
|
|
assert isinstance(items, list) and items[0]["contract_id"] == "contract-A"
|