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