2 releases
0.1.1 | Feb 28, 2023 |
---|---|
0.1.0 | Aug 19, 2022 |
#670 in Debugging
395 downloads per month
Used in 10 crates
8KB
65 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 stdout. 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.gen_range(0..=10) < 10);
}
Then if test fails, you can observe seed of randomness generator in stdout:
$ 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=cab4ab5c8471fa03691bb86d96c2febeb9b1099a78d164e8addbe7f83d107c78
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
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
~1.1–2MB
~34K SLoC