From 9850278ce4fc8a7d698082a20d5532bc1b6e009f Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 24 Oct 2023 16:40:03 -0600 Subject: [PATCH] Use deterministic randomness in arbitrary tests (#1120) ### What Use a seeded StdRng instead of thread_rng in arbitrary tests. ### Why Per https://github.com/stellar/rs-soroban-env/issues/810 randomized test cases should be deterministic. ### Known limitations This is different from the approach in soroban-env-host from https://github.com/stellar/rs-soroban-env/pull/1124, where a test prng is attached to the env / host. There are two more uses of thread_rng in this crate, but I don't know enough about that code to know how they should be removed, i.e. if they should follow a pattern similar to soroban-env-host. I am willing to replace all uses of thread_rng if given guidance about the preferred way to do it. The implementation of StdRng is allowed to change in the future, so it's possible the exact numbers generated could change. I could import rand_chacha instead if desired. Co-authored-by: Leigh McCulloch <351529+leighmcculloch@users.noreply.github.com> --- soroban-sdk/src/arbitrary.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/soroban-sdk/src/arbitrary.rs b/soroban-sdk/src/arbitrary.rs index 2d62c3f08..8105141a3 100644 --- a/soroban-sdk/src/arbitrary.rs +++ b/soroban-sdk/src/arbitrary.rs @@ -972,7 +972,7 @@ mod tests { }; use crate::{Env, IntoVal}; use arbitrary::{Arbitrary, Unstructured}; - use rand::RngCore; + use rand::{RngCore, SeedableRng}; fn run_test() where @@ -980,7 +980,7 @@ mod tests { T::Prototype: for<'a> Arbitrary<'a>, { let env = Env::default(); - let mut rng = rand::thread_rng(); + let mut rng = rand::rngs::StdRng::seed_from_u64(0); let mut rng_data = [0u8; 64]; for _ in 0..100 {