40 lines
1.2 KiB
Python
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
|