idea149-deltax-forge-cross/tests/test_delta_sync.py

32 lines
1.2 KiB
Python

from deltax_forge_cross.core.delta_sync import DeltaCRDT, DeltaAction, deterministic_merge, merge_snapshots
def test_gen_and_snapshot_merge():
a = DeltaCRDT("VENUE_A")
b = DeltaCRDT("VENUE_B")
act_a = a.gen_action(asset="AAPL", delta=5.0)
act_b = b.gen_action(asset="AAPL", delta=3.0)
# Local snapshots
snap_a = a.snapshot()
snap_b = b.snapshot()
merged = merge_snapshots([snap_a, snap_b])
assert "AAPL" in merged
# Conservative policy selects smaller absolute delta (3.0)
assert merged["AAPL"].delta == 3.0
# Merged version should include both counters
assert "VENUE_A" in merged["AAPL"].version and "VENUE_B" in merged["AAPL"].version
def test_deterministic_merge_tie_break():
# Two equal magnitude deltas: tie breaks by venue id lexicographically
a1 = DeltaAction(venue="B", asset="MSFT", delta=2.0, version={"B": 1})
a2 = DeltaAction(venue="A", asset="MSFT", delta=2.0, version={"A": 1})
merged = deterministic_merge([a1, a2])
assert merged is not None
# tie-break picks venue 'A' because ('abs', 'venue') sorts to ('2.0','A') first
assert merged.venue == "A"
assert merged.delta == 2.0