#rand #reproducibility

dev rand_dev

测试的可重复随机数生成器

2个版本

0.1.1 2023年2月28日
0.1.0 2022年8月19日

#497调试

Download history 74/week @ 2024-03-11 120/week @ 2024-03-18 179/week @ 2024-03-25 184/week @ 2024-04-01 111/week @ 2024-04-08 235/week @ 2024-04-15 189/week @ 2024-04-22 107/week @ 2024-04-29 77/week @ 2024-05-06 132/week @ 2024-05-13 160/week @ 2024-05-20 36/week @ 2024-05-27 86/week @ 2024-06-03 170/week @ 2024-06-10 236/week @ 2024-06-17 29/week @ 2024-06-24

每月522次下载
用于 8 crates

MIT/Apache

8KB
65

License Docs Crates io

测试的可重复随机数生成器

具有可重复测试有助于调试具有概率性质的问题。此库提供了一个与 rand Crate 兼容的随机数生成器 DevRng (它实现了 RngRngCoreSeedableRng 特性)。当构造生成器时,其种子将打印到stdout。您可以通过设置 RUST_TESTS_SEED 环境变量来覆盖种子。相同的种子导致跨所有平台生成相同的随机性。

用法

可重复的随机数源可以在一行中添加

use rand::Rng;
use rand_dev::DevRng;

#[test]
fn it_works() {
    let mut rng = DevRng::new();
    assert!(rng.gen_range(0..=10) < 10);
}

然后如果测试失败,您可以在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

现在您可以通过设置环境变量来修复种子以重现和调试失败的测试

$ export RUST_TESTS_SEED=cab4ab5c8471fa03691bb86d96c2febeb9b1099a78d164e8addbe7f83d107c78
$ cargo test

许可协议

根据您的选择,许可协议为以下之一

  • Apache许可证,版本2.0
  • MIT许可证

贡献

除非您明确表示,否则您有意提交的任何贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~235–420KB