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"