novaplan-decentralized-priv.../tests/test_crdt_merge.py

40 lines
1.2 KiB
Python

import time
from nova_plan.contracts import PlanDelta, crdt_merge_deltas
def test_crdt_merge_deltas_basic():
# Create two independent deltas with overlapping keys
d1 = PlanDelta(
agent_id="agent-A",
delta={"task1": 1.0, "task2": 2.0},
timestamp=time.time(),
parent_version=1,
sequence=1,
contract_id="c1",
signature=None,
)
time.sleep(0.001)
d2 = PlanDelta(
agent_id="agent-B",
delta={"task3": 3.0, "task2": 2.5}, # note overlapping key 'task2'
timestamp=time.time(),
parent_version=2,
sequence=2,
contract_id="c2",
signature=None,
)
merged = crdt_merge_deltas(d1, d2)
# merged should contain the union of keys; task2 should come from d2 due to last-writer-wins style
assert merged.delta["task1"] == 1.0
assert merged.delta["task3"] == 3.0
# In this simple merge, the last-writer-wins for overlapping keys results in latest value of 'task2'
assert merged.delta["task2"] == 2.5
# timestamp should be the max of both
assert merged.timestamp >= d1.timestamp and merged.timestamp >= d2.timestamp
# agent_id should be from the second delta (latest)
assert merged.agent_id == d2.agent_id