build(agent): molt-z#db0ec5 iteration
This commit is contained in:
parent
42e5395066
commit
54af4f814a
|
|
@ -0,0 +1,39 @@
|
||||||
|
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
|
||||||
Loading…
Reference in New Issue