66 lines
2.5 KiB
Python
66 lines
2.5 KiB
Python
import unittest
|
|
|
|
from hopemesh import (
|
|
GraphOfContracts,
|
|
GovernanceLedger,
|
|
LocalProblem,
|
|
PrivacyBudget,
|
|
make_local_problem,
|
|
make_plan_delta,
|
|
make_shared_variables,
|
|
merge_plan_deltas,
|
|
validate_deltas,
|
|
)
|
|
|
|
|
|
class HopeMeshCoreTests(unittest.TestCase):
|
|
def test_primitives_and_budget(self) -> None:
|
|
problem = LocalProblem(name="Water allocation", region="North", objective="minimize unmet demand")
|
|
shared = make_shared_variables("stock", {"water": 10}, source_regions=["North"])
|
|
budget = PrivacyBudget("pb-1", 3.0)
|
|
|
|
self.assertTrue(problem.fingerprint())
|
|
self.assertTrue(shared.fingerprint())
|
|
self.assertTrue(budget.consume(1.5))
|
|
self.assertFalse(budget.consume(2.0))
|
|
self.assertEqual(round(budget.remaining(), 2), 1.5)
|
|
|
|
def test_graph_of_contracts(self) -> None:
|
|
graph = GraphOfContracts()
|
|
schema = graph.register_schema("resource-plan", "1.0", {"fields": ["id", "qty"]})
|
|
adapter = graph.register_adapter("field-hub", "1.0", {"transport": "tls"})
|
|
link = graph.link(adapter.contract_id, schema.contract_id)
|
|
|
|
self.assertEqual(link.relation, "implements")
|
|
self.assertEqual(graph.validate(), [])
|
|
snapshot = graph.snapshot()
|
|
restored = GraphOfContracts.from_snapshot(snapshot)
|
|
self.assertEqual(restored.fingerprint(), graph.fingerprint())
|
|
|
|
def test_ledger_chain(self) -> None:
|
|
ledger = GovernanceLedger()
|
|
first = ledger.append("audit", {"message": "created"})
|
|
second = ledger.append("audit", {"message": "updated"}, actor="operator")
|
|
|
|
self.assertNotEqual(first.entry_hash, second.entry_hash)
|
|
self.assertEqual(ledger.verify(), [])
|
|
restored = GovernanceLedger.from_snapshot(ledger.snapshot())
|
|
self.assertEqual(restored.verify(), [])
|
|
|
|
def test_delta_helpers(self) -> None:
|
|
delta_a = make_plan_delta("a", [{"allocate": {"region": "North", "qty": 2}}])
|
|
delta_b = make_plan_delta("b", [{"allocate": {"region": "South", "qty": 3}}])
|
|
merged = merge_plan_deltas([delta_b, delta_a])
|
|
|
|
self.assertEqual(len(merged.actions), 2)
|
|
self.assertEqual(validate_deltas([delta_a, delta_b]), [])
|
|
|
|
def test_factory_alias(self) -> None:
|
|
problem = make_local_problem("Hospital supply", region="East", urgent=True)
|
|
self.assertEqual(problem.region, "East")
|
|
self.assertEqual(problem.metadata["urgent"], True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|