Skip to content

Commit

Permalink
Use deterministic randomness in arbitrary tests (#1120)
Browse files Browse the repository at this point in the history
### What

Use a seeded StdRng instead of thread_rng in arbitrary tests.

### Why

Per stellar/rs-soroban-env#810 randomized test
cases should be deterministic.

### Known limitations

This is different from the approach in soroban-env-host from
stellar/rs-soroban-env#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 <[email protected]>
  • Loading branch information
brson and leighmcculloch authored Oct 24, 2023
1 parent 6b04bfc commit 9850278
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions soroban-sdk/src/arbitrary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -972,15 +972,15 @@ mod tests {
};
use crate::{Env, IntoVal};
use arbitrary::{Arbitrary, Unstructured};
use rand::RngCore;
use rand::{RngCore, SeedableRng};

fn run_test<T>()
where
T: SorobanArbitrary,
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 {
Expand Down

0 comments on commit 9850278

Please sign in to comment.