idea182-implementation/tests/test_plan_delta.py

58 lines
1.3 KiB
Python

from gravityweave.plan_delta import ORSet, LWWRegister, PlanDelta
def test_orset_add_remove_merge():
a = ORSet()
b = ORSet()
e1 = {"id": 1, "type": "burn", "fuel": 5}
e2 = {"id": 2, "type": "downlink", "window": "T1"}
a.add(e1)
b.add(e2)
# both merged should contain both elements
m = a.merge(b)
vals = m.value()
assert any(v["id"] == 1 for v in vals)
assert any(v["id"] == 2 for v in vals)
# remove in one, merge should reflect removal by timestamp
a.remove(e1)
m2 = a.merge(b)
vals2 = m2.value()
assert not any(v["id"] == 1 for v in vals2)
assert any(v["id"] == 2 for v in vals2)
def test_lww_register_merge():
r1 = LWWRegister()
r2 = LWWRegister()
r1.write("low")
# ensure r2 is newer
r2.write("high")
merged = r1.merge(r2)
assert merged.read() == "high"
def test_plandelta_merge_priority_origin():
d1 = PlanDelta()
d2 = PlanDelta()
d1.commitments.add({"id": "c1"})
d2.commitments.add({"id": "c2"})
d1.priority.write(1)
d2.priority.write(2)
d1.origin = "nodeA"
d2.origin = "nodeB"
merged = d1.merge(d2)
# both commitments present
ids = {c.get("id") for c in merged.commitments.value()}
assert "c1" in ids and "c2" in ids
# origin should follow the latest priority's origin (d2)
assert merged.origin == "nodeB"