marketmesh-privacy-preservi.../tests/test_delta_sync_merge.py

39 lines
1.3 KiB
Python

import json
import hashlib
import pytest
from marketmesh_privacy_preserving_federated_.core import DeltaSync
def test_delta_sync_merge_basic():
ds1 = DeltaSync(
contract_id="c1",
version_vector={"p1": 1},
payload={"revenue": 10.0, "customers": 5.0},
hash_="h1",
)
ds2 = DeltaSync(
contract_id="c1",
version_vector={"p1": 2, "p2": 1},
payload={"revenue": 20.0, "customers": 3.0, "activation": 0.5},
hash_="h2",
)
merged = ds1.merge(ds2)
# version vector should be per-peer max
assert merged.contract_id == "c1"
assert merged.version_vector["p1"] == 2
assert merged.version_vector["p2"] == 1
# KPI merging: revenue and customers present in both -> average; new KPI from ds2 is included
assert pytest.approx(merged.payload["revenue"]) == (10.0 + 20.0) / 2.0
assert pytest.approx(merged.payload["customers"]) == (5.0 + 3.0) / 2.0
assert pytest.approx(merged.payload["activation"]) == 0.5
# Merging again with the same pair should produce the same result (deterministic)
merged_again = ds1.merge(ds2)
assert merged.payload == merged_again.payload
assert merged.version_vector == merged_again.version_vector
assert merged.hash == merged_again.hash