34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
from mercuriusmesh.simulator import DeterministicSimulator
|
|
from mercuriusmesh.adapters import ToyVenueAdapter
|
|
from mercuriusmesh.contracts import OrderEvent
|
|
|
|
|
|
def test_deterministic_replay():
|
|
sim = DeterministicSimulator()
|
|
a = ToyVenueAdapter("V1", initial_bid=100.0, initial_ask=100.5)
|
|
b = ToyVenueAdapter("V2", initial_bid=99.8, initial_ask=100.3)
|
|
sim.add_adapter(a)
|
|
sim.add_adapter(b)
|
|
|
|
o1 = OrderEvent(order_id="o1", venue_id="V1", asset="TEST/USD", side="buy", price=None, size=1)
|
|
o2 = OrderEvent(order_id="o2", venue_id="V2", asset="TEST/USD", side="sell", price=None, size=2)
|
|
|
|
sim.set_link("V1", connected=False)
|
|
sim.submit_order(o1)
|
|
sim.set_link("V1", connected=True, latency_ms=1)
|
|
sim.advance(1)
|
|
sim.submit_order(o2)
|
|
sim.advance(1)
|
|
|
|
# snapshot state
|
|
s1 = sim.compute_shared_signals()
|
|
log_len = len(sim.event_log)
|
|
|
|
# replay and compare
|
|
sim.replay()
|
|
s2 = sim.compute_shared_signals()
|
|
|
|
assert s1.mid_price == s2.mid_price
|
|
assert s1.liquidity == s2.liquidity
|
|
assert len(sim.event_log) == log_len
|