cosmosmesh-privacy-preservi.../tests/test_catopt_bridge_basic.py

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"