ace-sim
Deterministic simulation infrastructure. Everything needed to test protocol state machines reproducibly.
SimBus<N, Q> — message delivery with fault injection. Seeded RNG makes every run reproducible. Configurable faults: message loss, reorder, delay, corruption, timeout.
TcpSimBus<N, Q> — wraps SimBus and adds TCP connection state. The bus owns connection state — nodes don't track it. TCP fault injection: connection refused, mid-session reset, connect timeout.
CanSimBus<N, Q> — wraps SimBus and adds CAN bus state (Active / ErrorPassive / BusOff). CAN fault injection: arbitration loss, bit error, bus-off.
SimNode<N, Q> — trait for nodes on the simulation buses:
SimNodeErased<N, Q> — object-safe version with errors swallowed internally, enabling heterogeneous slices of different node types.
SimRunner<N, Q> — drives SimNodeErased slices over a SimBus.
TcpSimRunner<N, Q> — drives nodes over a TcpSimBus, additionally delivering TcpEvents to nodes implementing TcpEventHandler.
CanSimRunner<N, Q> — drives nodes over a CanSimBus, additionally delivering CanEvents to nodes implementing CanEventHandler.
FaultConfig — three presets: none(), light(), chaos(). All probabilities are (numerator, denominator) pairs for reproducibility.