3 unstable releases
Uses new Rust 2024
| 0.2.0 | Aug 29, 2025 |
|---|---|
| 0.1.1 | Feb 28, 2023 |
| 0.1.0 | Aug 19, 2022 |
#719 in Debugging
1,809 downloads per month
Used in 12 crates
11KB
71 lines
Reproducible randomness source for tests
Having reproducible tests helps debugging problems that have probabilistic nature. This library provides
a random numbers generator DevRng compatible with rand crate (it implements Rng, RngCore,
SeedableRng traits). When generator is constructed, its seed is printed to stderr. You can override a
seed by setting RUST_TESTS_SEED env variable. Same seed leads to same randomness generated across all
platforms.
Usage
Reproducible source of randomness can be added in one line:
use rand::Rng;
use rand_dev::DevRng;
#[test]
fn it_works() {
let mut rng = DevRng::new();
assert!(rng.random_range(0..=10) < 10);
}
Then if test fails, you can observe seed of randomness generator in captured stderr:
$ cargo test
Finished test [unoptimized + debuginfo] target(s) in 0.00s
Running unittests (target/debug/deps/simple_usage-592d47155d40d1f7)
running 1 test
test tests::it_works ... FAILED
failures:
---- tests::it_works stdout ----
RUST_TESTS_SEED=fa48105a3c2ada139e0aa234f235a7af5c766cac4daefca97b57d73915c5b736
thread 'tests::it_works' panicked at 'assertion failed: rng.gen_range(0..=10) < 10', src/lib.rs:9:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
tests::it_works
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
Now you can fix the seed by setting env variable to reproduce and debug a failing test:
$ export RUST_TESTS_SEED=cab4ab5c8471fa03691bb86d96c2febeb9b1099a78d164e8addbe7f83d107c78
$ cargo test
Features
rand-v09(disabled by default) when enabled, library re-exportsrand v0.9which will be accessible asrand_dev::rand.
License
Licensed under either of
- Apache License, Version 2.0
- MIT license
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~3MB
~48K SLoC