idea155-hopemesh-2-0/tests/test_core.py

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()