#determinism #testing #blog-post #turmoil-based

mad-turmoil

madsim-inspired determinism for turmoil-based simulation tests

2 unstable releases

Uses new Rust 2024

0.2.0 Nov 20, 2025
0.1.0 Apr 4, 2025

#89 in Simulation

Download history 11/week @ 2025-08-02 29/week @ 2025-08-09 1/week @ 2025-08-16 30/week @ 2025-08-23 75/week @ 2025-08-30 58/week @ 2025-09-06 168/week @ 2025-09-13 78/week @ 2025-09-20 82/week @ 2025-09-27 90/week @ 2025-10-04 81/week @ 2025-10-11 122/week @ 2025-10-18 140/week @ 2025-10-25 96/week @ 2025-11-01 7/week @ 2025-11-08

271 downloads per month

Apache-2.0

12KB
149 lines

mad-turmoil

madsim-inspired determinism for turmoil-based simulation tests

See blog post

Setup

Make sure you are only depending on this crate for simulation binaries!

fn main() -> eyre::Result<()> {
    let rng_seed = std::env::var("DST_SEED")?.parse()?;

    // Taming randomness...

    let mut rng = StdRng::seed_from_u64(rng_seed);
    mad_turmoil::rand::set_rng(rng.clone());
    assert_eq!(rng.next_u64(), mad_turmoil::rand::get_rng().next_u64());

    // Additionally, if you are using fastrand (possibly transitively!)
    fastrand::seed(rng_seed);

    // Taming time...

    let _tokio_time_guard = mad_turmoil::time::SimClocksGuard::init();

    // Go forth and create turmoil...
}

Dependencies

~4.5–8.5MB
~143K SLoC