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 stdout.
You can override a seed by setting RUST_TESTS_SEED
env variable. Same seed leads to same randomness
generated across all platforms.
Reproducible source of randomness can be added in one line:
```rust use rand::Rng; use rand_dev::DevRng;
fn itworks() { let mut rng = DevRng::new(); assert!(rng.genrange(0..=10) < 10); } ```
Then if test fails, you can observe seed of randomness generator in stdout: ```text $ 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::itworks stdout ----
Tests seed: cab4ab5c8471fa03691bb86d96c2febeb9b1099a78d164e8addbe7f83d107c78
thread 'tests::itworks' 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:
text
$ export RUST_TESTS_SEED=cab4ab5c8471fa03691bb86d96c2febeb9b1099a78d164e8addbe7f83d107c78
$ cargo test
Licensed under either of
at your option.
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.