diff --git a/twenty-first/Cargo.toml b/twenty-first/Cargo.toml index 135f1698..b48a822e 100644 --- a/twenty-first/Cargo.toml +++ b/twenty-first/Cargo.toml @@ -44,8 +44,7 @@ lazy_static = "1.5.0" num-bigint = { version = "0.4", features = ["serde"] } num-traits = "0.2" phf = { version = "0.11", features = ["macros"] } -rand = { version = "0.8", features = ["min_const_gen"] } -rand_distr = "0.4" +rand = "0.9" rayon = "1.10" serde = { version = "1.0", features = ["derive"] } serde-big-array = "0" diff --git a/twenty-first/benches/merkle_tree_auth_structure_size.rs b/twenty-first/benches/merkle_tree_auth_structure_size.rs index c7d0cc9f..57e4d39c 100644 --- a/twenty-first/benches/merkle_tree_auth_structure_size.rs +++ b/twenty-first/benches/merkle_tree_auth_structure_size.rs @@ -84,7 +84,7 @@ fn auth_structure_len(c: &mut Criterion) { let mut total_len = AuthStructureEncodingLength(0.0); for _ in 0..iters { let opened_indices = (0..num_opened_indices) - .map(|_| rng.gen_range(0..num_leafs)) + .map(|_| rng.random_range(0..num_leafs)) .collect_vec(); let auth_structure = mt.authentication_structure(&opened_indices).unwrap(); let this_len = auth_structure.encode().len(); diff --git a/twenty-first/benches/merkle_tree_authenticate.rs b/twenty-first/benches/merkle_tree_authenticate.rs index 7af34ed0..31dec64e 100644 --- a/twenty-first/benches/merkle_tree_authenticate.rs +++ b/twenty-first/benches/merkle_tree_authenticate.rs @@ -74,7 +74,7 @@ impl MerkleTreeSampler { fn indices_to_open(&mut self) -> Vec { (0..self.num_opened_indices) - .map(|_| self.rng.gen_range(0..self.num_leafs())) + .map(|_| self.rng.random_range(0..self.num_leafs())) .collect() } diff --git a/twenty-first/src/amount/u32s.rs b/twenty-first/src/amount/u32s.rs index 8c4105ec..89ba5422 100644 --- a/twenty-first/src/amount/u32s.rs +++ b/twenty-first/src/amount/u32s.rs @@ -12,9 +12,9 @@ use num_bigint::BigUint; use num_traits::ConstZero; use num_traits::One; use num_traits::Zero; +use rand::distr::Distribution; +use rand::distr::StandardUniform; use rand::Rng; -use rand_distr::Distribution; -use rand_distr::Standard; use serde_big_array; use serde_big_array::BigArray; use serde_derive::Deserialize; @@ -304,9 +304,9 @@ impl Sum for U32s { } } -impl Distribution> for Standard { +impl Distribution> for StandardUniform { fn sample(&self, rng: &mut R) -> U32s { - let values = rng.sample::<[u32; N], Standard>(Standard); + let values = rng.random(); U32s { values } } } @@ -386,7 +386,6 @@ impl BFieldCodec for U32s { #[cfg(test)] mod u32s_tests { use rand::random; - use rand::thread_rng; use rand::Rng; use rand::RngCore; @@ -418,7 +417,7 @@ mod u32s_tests { #[test] fn u128_conversion_test() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); for _ in 0..100 { let a_as_u128: u128 = ((rng.next_u64() as u128) << 64) | rng.next_u64() as u128; let a: U32s<4> = a_as_u128.try_into().unwrap(); @@ -756,12 +755,12 @@ mod u32s_tests { fn get_bit_set_bit_pbt() { let outer_count = 100; let inner_count = 20; - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let vals: Vec> = random_elements(outer_count); for mut val in vals { - let bit_value: bool = rng.gen(); + let bit_value: bool = rng.random(); for _ in 0..inner_count { - let bit_index = rng.gen_range(0..4 * 32); + let bit_index = rng.random_range(0..4 * 32); val.set_bit(bit_index, bit_value); assert_eq!(bit_value, val.get_bit(bit_index)); } diff --git a/twenty-first/src/math/b_field_element.rs b/twenty-first/src/math/b_field_element.rs index c46f74f5..a22f5d80 100644 --- a/twenty-first/src/math/b_field_element.rs +++ b/twenty-first/src/math/b_field_element.rs @@ -21,9 +21,9 @@ use num_traits::ConstZero; use num_traits::One; use num_traits::Zero; use phf::phf_map; +use rand::distr::Distribution; +use rand::distr::StandardUniform; use rand::Rng; -use rand_distr::Distribution; -use rand_distr::Standard; use serde::Deserialize; use serde::Deserializer; use serde::Serialize; @@ -643,9 +643,9 @@ impl CyclicGroupGenerator for BFieldElement { } } -impl Distribution for Standard { +impl Distribution for StandardUniform { fn sample(&self, rng: &mut R) -> BFieldElement { - BFieldElement::new(rng.gen_range(0..=BFieldElement::MAX)) + BFieldElement::new(rng.random_range(0..=BFieldElement::MAX)) } } @@ -802,7 +802,6 @@ mod b_prime_field_element_test { use proptest::prelude::*; use proptest_arbitrary_interop::arb; use rand::random; - use rand::thread_rng; use test_strategy::proptest; use crate::math::b_field_element::*; @@ -1314,8 +1313,8 @@ mod b_prime_field_element_test { let one = BFieldElement::ONE; assert_eq!(zero, zero.inverse_or_zero()); - let mut rng = rand::thread_rng(); - let elem: BFieldElement = rng.gen(); + let mut rng = rand::rng(); + let elem: BFieldElement = rng.random(); if elem.is_zero() { assert_eq!(zero, elem.inverse_or_zero()) } else { @@ -1325,10 +1324,10 @@ mod b_prime_field_element_test { #[test] fn test_random_squares() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let p = BFieldElement::P; for _ in 0..100 { - let a = rng.gen_range(0..p); + let a = rng.random_range(0..p); let asq = (((a as u128) * (a as u128)) % (p as u128)) as u64; let b = BFieldElement::new(a); let bsq = BFieldElement::new(asq); @@ -1353,9 +1352,9 @@ mod b_prime_field_element_test { #[test] fn test_random_raw() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); for _ in 0..100 { - let e: BFieldElement = rng.gen(); + let e: BFieldElement = rng.random(); let bytes = e.raw_bytes(); let c = BFieldElement::from_raw_bytes(&bytes); assert_eq!(e, c); diff --git a/twenty-first/src/math/digest.rs b/twenty-first/src/math/digest.rs index f5f9ab0f..6e65636a 100644 --- a/twenty-first/src/math/digest.rs +++ b/twenty-first/src/math/digest.rs @@ -8,9 +8,9 @@ use itertools::Itertools; use num_bigint::BigUint; use num_traits::ConstZero; use num_traits::Zero; +use rand::distr::Distribution; +use rand::distr::StandardUniform; use rand::Rng; -use rand_distr::Distribution; -use rand_distr::Standard; use serde::Deserialize; use serde::Deserializer; use serde::Serialize; @@ -105,16 +105,9 @@ impl fmt::UpperHex for Digest { } } -impl Distribution for Standard { +impl Distribution for StandardUniform { fn sample(&self, rng: &mut R) -> Digest { - // FIXME: impl Fill for [BFieldElement] to rng.fill() a [BFieldElement; Digest::LEN]. - let elements = rng - .sample_iter(Standard) - .take(Digest::LEN) - .collect_vec() - .try_into() - .unwrap(); - Digest::new(elements) + Digest::new(rng.random()) } } diff --git a/twenty-first/src/math/lattice.rs b/twenty-first/src/math/lattice.rs index e97b83d4..335911ba 100644 --- a/twenty-first/src/math/lattice.rs +++ b/twenty-first/src/math/lattice.rs @@ -818,7 +818,6 @@ mod lattice_test { use num_traits::ConstOne; use num_traits::Zero; use rand::random; - use rand::thread_rng; use rand::RngCore; use sha3::Digest as Sha3Digest; use sha3::Sha3_256; @@ -875,7 +874,7 @@ mod lattice_test { #[test] fn test_embedding() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let msg: [u8; 32] = (0..32) .map(|_| (rng.next_u32() % 256) as u8) .collect_vec() @@ -889,7 +888,7 @@ mod lattice_test { #[test] fn test_module_distributivity() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let randomness = (0..(2 * 3 + 2 * 3 + 3) * 64 * 9) .map(|_| (rng.next_u32() % 256) as u8) .collect_vec(); @@ -912,7 +911,7 @@ mod lattice_test { #[test] fn test_module_multiply() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let randomness = (0..(2 * 3 + 2 * 3 + 3) * 64 * 9) .map(|_| (rng.next_u32() % 256) as u8) .collect_vec(); @@ -931,7 +930,7 @@ mod lattice_test { #[test] fn test_kem() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let mut key_randomness: [u8; 32] = [0u8; 32]; rng.fill_bytes(&mut key_randomness); let mut ctxt_randomness: [u8; 32] = [0u8; 32]; @@ -978,7 +977,7 @@ mod lattice_test { fn serialization_deserialization_test() { // This is tested here since the serialization for these objects is a bit more complicated // than the standard serde stuff. So to be sure that it works, we just run this test here. - let mut rng = thread_rng(); + let mut rng = rand::rng(); let mut key_randomness: [u8; 32] = [0u8; 32]; rng.fill_bytes(&mut key_randomness); let mut ctxt_randomness: [u8; 32] = [0u8; 32]; diff --git a/twenty-first/src/math/mds.rs b/twenty-first/src/math/mds.rs index 9b0d9f20..387ea8bb 100644 --- a/twenty-first/src/math/mds.rs +++ b/twenty-first/src/math/mds.rs @@ -498,14 +498,13 @@ pub fn generated_function(input: &[u64]) -> [u64; 16] { #[cfg(test)] mod tests { use itertools::Itertools; - use rand::thread_rng; use rand::RngCore; use super::*; #[test] fn test_karatsuba() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let n = 8; let a = (0..n) .map(|_| (rng.next_u32() % (1 << 20)) as u64) @@ -525,7 +524,7 @@ mod tests { #[test] fn test_negacyclic_mul() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let n = 8; let a = (0..n) .map(|_| (rng.next_u32() % (1 << 20)) as u64) @@ -548,7 +547,7 @@ mod tests { #[test] fn test_recursive_cyclic_mul() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let n = 16; let a = (0..n).map(|_| rng.next_u32() as u64).collect_vec(); let b = (0..n) diff --git a/twenty-first/src/math/other.rs b/twenty-first/src/math/other.rs index 1759f181..a155fc0f 100644 --- a/twenty-first/src/math/other.rs +++ b/twenty-first/src/math/other.rs @@ -1,8 +1,8 @@ -use rand::distributions::Distribution; -use rand::distributions::Standard; +use rand::distr::Distribution; +use rand::distr::StandardUniform; use rand::Rng; -/// Generate `n` random elements using [`rand::thread_rng()`]. +/// Generate `n` random elements using [`rand::rng()`]. /// /// For example implementations of the [`Distribution`] trait for [`Standard`], see /// [`BFieldElement`][bfe] or [`XFieldElement`][xfe]. @@ -11,7 +11,7 @@ use rand::Rng; /// [xfe]: crate::prelude::XFieldElement pub fn random_elements(n: usize) -> Vec where - Standard: Distribution, + StandardUniform: Distribution, { - rand::thread_rng().sample_iter(Standard).take(n).collect() + rand::rng().sample_iter(StandardUniform).take(n).collect() } diff --git a/twenty-first/src/math/tip5.rs b/twenty-first/src/math/tip5.rs index 8f46a3ab..47a2de00 100644 --- a/twenty-first/src/math/tip5.rs +++ b/twenty-first/src/math/tip5.rs @@ -706,7 +706,6 @@ pub(crate) mod tip5_tests { use prop::sample::size_range; use proptest::prelude::*; use proptest_arbitrary_interop::arb; - use rand::thread_rng; use rand::Rng; use rand::RngCore; use rayon::prelude::IntoParallelIterator; @@ -720,8 +719,8 @@ pub(crate) mod tip5_tests { impl Tip5 { pub(crate) fn randomly_seeded() -> Self { let mut sponge = Self::init(); - let mut rng = thread_rng(); - sponge.absorb(rng.gen()); + let mut rng = rand::rng(); + sponge.absorb(rng.random()); sponge } } @@ -1061,7 +1060,7 @@ pub(crate) mod tip5_tests { #[test] fn test_complex_product() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let mut random_small_i64 = || (rng.next_u32() % (1 << 16)) as i64; for _ in 0..1000 { let f = (random_small_i64(), random_small_i64()); @@ -1088,9 +1087,9 @@ pub(crate) mod tip5_tests { #[test] fn test_mds_agree() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); let initial_state: [BFieldElement; STATE_SIZE] = (0..STATE_SIZE) - .map(|_| BFieldElement::new(rng.gen_range(0..10))) + .map(|_| BFieldElement::new(rng.random_range(0..10))) .collect_vec() .try_into() .unwrap(); diff --git a/twenty-first/src/math/x_field_element.rs b/twenty-first/src/math/x_field_element.rs index 30700147..63a0df52 100644 --- a/twenty-first/src/math/x_field_element.rs +++ b/twenty-first/src/math/x_field_element.rs @@ -15,9 +15,9 @@ use num_traits::ConstOne; use num_traits::ConstZero; use num_traits::One; use num_traits::Zero; +use rand::distr::Distribution; +use rand::distr::StandardUniform; use rand::Rng; -use rand_distr::Distribution; -use rand_distr::Standard; use serde::Deserialize; use serde::Serialize; @@ -321,14 +321,9 @@ impl PrimitiveRootOfUnity for XFieldElement { } } -impl Distribution for Standard { +impl Distribution for StandardUniform { fn sample(&self, rng: &mut R) -> XFieldElement { - let coefficients = [ - rng.gen::(), - rng.gen::(), - rng.gen::(), - ]; - XFieldElement { coefficients } + XFieldElement::new(rng.random()) } } @@ -834,10 +829,10 @@ mod tests { #[test] fn x_field_overloaded_arithmetic_test() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for _ in 0..100 { - let xfe = rng.gen::(); - let bfe = rng.gen::(); + let xfe = rng.random::(); + let bfe = rng.random::(); // 1. xfe + bfe.lift() = bfe.lift() + xfe // 2. xfe + bfe = xfe + bfe.lift() diff --git a/twenty-first/src/mock/mmr/mod.rs b/twenty-first/src/mock/mmr/mod.rs index 0ef67be6..e4803798 100644 --- a/twenty-first/src/mock/mmr/mod.rs +++ b/twenty-first/src/mock/mmr/mod.rs @@ -41,11 +41,11 @@ mod shared_tests_tests { #[test] fn mmra_and_mps_construct_test_cornercases() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for leaf_count in 0..5 { let (_mmra, _mps) = mmra_with_mps(leaf_count, vec![]); } - let some: Digest = rng.gen(); + let some: Digest = rng.random(); for leaf_count in 1..10 { for leaf_index in 0..leaf_count { let (mmra, mps) = mmra_with_mps(leaf_count, vec![(leaf_index, some)]); @@ -53,7 +53,7 @@ mod shared_tests_tests { } } - let other: Digest = rng.gen(); + let other: Digest = rng.random(); for leaf_count in 2..10 { for some_index in 0..leaf_count { for other_index in 0..leaf_count { @@ -80,9 +80,9 @@ mod shared_tests_tests { #[test] fn mmra_and_mps_construct_test_small() { - let mut rng = rand::thread_rng(); - let digest_leaf_idx12: Digest = rng.gen(); - let digest_leaf_idx14: Digest = rng.gen(); + let mut rng = rand::rng(); + let digest_leaf_idx12: Digest = rng.random(); + let digest_leaf_idx14: Digest = rng.random(); let (mmra, mps) = mmra_with_mps(32, vec![(12, digest_leaf_idx12), (14, digest_leaf_idx14)]); assert!(mps[0].verify(12, digest_leaf_idx12, &mmra.peaks(), mmra.num_leafs())); @@ -91,13 +91,13 @@ mod shared_tests_tests { #[test] fn mmra_and_mps_construct_test_pbt() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for leaf_count in 2..25 { for specified_count in 0..leaf_count { let mut specified_indices: HashSet = HashSet::default(); for _ in 0..specified_count { - specified_indices.insert(rng.gen_range(0..leaf_count)); + specified_indices.insert(rng.random_range(0..leaf_count)); } let collected_values = specified_indices.len(); @@ -116,12 +116,12 @@ mod shared_tests_tests { #[test] fn mmra_and_mps_construct_test_big() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let leaf_count = (1 << 59) + (1 << 44) + 1234567890; let specified_count = 40; let mut specified_indices: HashSet = HashSet::default(); for _ in 0..specified_count { - specified_indices.insert(rng.gen_range(0..leaf_count)); + specified_indices.insert(rng.random_range(0..leaf_count)); } let collected_values = specified_indices.len(); diff --git a/twenty-first/src/util_types/mmr/mmr_accumulator.rs b/twenty-first/src/util_types/mmr/mmr_accumulator.rs index c844cbd3..b770d225 100644 --- a/twenty-first/src/util_types/mmr/mmr_accumulator.rs +++ b/twenty-first/src/util_types/mmr/mmr_accumulator.rs @@ -461,11 +461,9 @@ mod accumulator_mmr_tests { use proptest::collection::vec; use proptest::prop_assert_eq; use proptest_arbitrary_interop::arb; - use rand::distributions::Uniform; + use rand::distr::Uniform; use rand::random; - use rand::thread_rng; use rand::Rng; - use rand::RngCore; use test_strategy::proptest; use super::*; @@ -623,7 +621,7 @@ mod accumulator_mmr_tests { #[test] fn batch_mutate_leaf_and_update_mps_test() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for mmr_leaf_count in 1..100 { let initial_leaf_digests: Vec = random_elements(mmr_leaf_count); @@ -632,23 +630,25 @@ mod accumulator_mmr_tests { let mut ammr: MockMmr = get_mock_ammr_from_digests(initial_leaf_digests.clone()); let mut ammr_copy: MockMmr = get_mock_ammr_from_digests(initial_leaf_digests.clone()); - let mutated_leaf_count = rng.gen_range(0..mmr_leaf_count); + let mutated_leaf_count = rng.random_range(0..mmr_leaf_count); let all_indices: Vec = (0..mmr_leaf_count as u64).collect(); // Pick indices for leafs that are being mutated let mut all_indices_mut0 = all_indices.clone(); let mut mutated_leaf_indices: Vec = vec![]; for _ in 0..mutated_leaf_count { - let leaf_index = all_indices_mut0.remove(rng.gen_range(0..all_indices_mut0.len())); + let leaf_index = + all_indices_mut0.remove(rng.random_range(0..all_indices_mut0.len())); mutated_leaf_indices.push(leaf_index); } // Pick membership proofs that we want to update - let membership_proof_count = rng.gen_range(0..mmr_leaf_count); + let membership_proof_count = rng.random_range(0..mmr_leaf_count); let mut all_indices_mut1 = all_indices.clone(); let mut membership_proof_indices: Vec = vec![]; for _ in 0..membership_proof_count { - let leaf_index = all_indices_mut1.remove(rng.gen_range(0..all_indices_mut1.len())); + let leaf_index = + all_indices_mut1.remove(rng.random_range(0..all_indices_mut1.len())); membership_proof_indices.push(leaf_index); } @@ -776,8 +776,8 @@ mod accumulator_mmr_tests { // Ensure that indices are unique since batch updating cannot update // the same leaf twice in one go - let mutated_indices: Vec = thread_rng() - .sample_iter(Uniform::new(0, start_size as u64)) + let mutated_indices: Vec = rand::rng() + .sample_iter(Uniform::new(0, start_size as u64).unwrap()) .take(mutate_size) .sorted() .unique() @@ -902,8 +902,8 @@ mod accumulator_mmr_tests { #[test] fn test_mmr_accumulator_decode() { for _ in 0..100 { - let num_leafs = (thread_rng().next_u32() % 100) as usize; - let leafs: Vec = random_elements(num_leafs); + let num_leafs = rand::random_range(0..100); + let leafs = random_elements(num_leafs); let mmra = MmrAccumulator::new_from_leafs(leafs); let encoded = mmra.encode(); let decoded = *MmrAccumulator::decode(&encoded).unwrap(); diff --git a/twenty-first/src/util_types/mmr/mmr_membership_proof.rs b/twenty-first/src/util_types/mmr/mmr_membership_proof.rs index 84f39d20..07b8f46f 100644 --- a/twenty-first/src/util_types/mmr/mmr_membership_proof.rs +++ b/twenty-first/src/util_types/mmr/mmr_membership_proof.rs @@ -633,9 +633,7 @@ mod mmr_membership_proof_test { use itertools::Itertools; use proptest_arbitrary_interop::arb; use rand::random; - use rand::thread_rng; use rand::Rng; - use rand::RngCore; use test_strategy::proptest; use super::*; @@ -652,9 +650,9 @@ mod mmr_membership_proof_test { #[test] fn equality_and_hash_test() { type H = Tip5; - let mut rng = rand::thread_rng(); - let some_digest: Digest = rng.gen(); - let other_digest: Digest = rng.gen(); + let mut rng = rand::rng(); + let some_digest: Digest = rng.random(); + let other_digest: Digest = rng.random(); // Assert that both membership proofs and their digests are equal let mp0 = MmrMembershipProof::new(vec![]); @@ -910,15 +908,16 @@ mod mmr_membership_proof_test { let total_leaf_count = 34; let mut leaf_hashes: Vec = random_elements(total_leaf_count); let mut archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_hashes.clone()); - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for modified_leaf_count in 0..=total_leaf_count { // Pick a set of membership proofs that we want to batch-update - let own_membership_proof_count = rng.gen_range(0..total_leaf_count); + let own_membership_proof_count = rng.random_range(0..total_leaf_count); let mut all_leaf_indices: Vec = (0..total_leaf_count as u64).collect(); let mut own_mp_leaf_indices = vec![]; let mut own_membership_proofs: Vec = vec![]; for _ in 0..own_membership_proof_count { - let leaf_index = all_leaf_indices.remove(rng.gen_range(0..all_leaf_indices.len())); + let leaf_index = + all_leaf_indices.remove(rng.random_range(0..all_leaf_indices.len())); own_membership_proofs.push(archival_mmr.prove_membership(leaf_index)); own_mp_leaf_indices.push(leaf_index); } @@ -931,7 +930,7 @@ mod mmr_membership_proof_test { let mut mutated_leaf_leaf_indices = vec![]; for _ in 0..modified_leaf_count { let leaf_index = - all_leaf_indices_new.remove(rng.gen_range(0..all_leaf_indices_new.len())); + all_leaf_indices_new.remove(rng.random_range(0..all_leaf_indices_new.len())); authentication_paths.push(archival_mmr.prove_membership(leaf_index)); mutated_leaf_leaf_indices.push(leaf_index); } @@ -1300,10 +1299,10 @@ mod mmr_membership_proof_test { let original_leaf_count = (1 << 35) + (1 << 7) - 1; let specified_count = 40; - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let mut specified_indices: HashSet = HashSet::default(); for _ in 0..specified_count { - specified_indices.insert(rng.gen_range(0..original_leaf_count)); + specified_indices.insert(rng.random_range(0..original_leaf_count)); } // Ensure that at least *one* MP will be mutated upon insertion of a new leaf @@ -1399,7 +1398,7 @@ mod mmr_membership_proof_test { for leaf_count in 0..68u64 { // 1. Build a MockMmr with a variable amount of leafs let leaf_digests: Vec = random_elements(leaf_count as usize); - let new_leaf_digest: Digest = rand::thread_rng().gen(); + let new_leaf_digest: Digest = random(); let archival_mmr: MockMmr = get_mock_ammr_from_digests(leaf_digests.clone()); // For every valid data index @@ -1603,12 +1602,12 @@ mod mmr_membership_proof_test { #[test] fn test_decode_mmr_membership_proof() { - let mut rng = thread_rng(); + let mut rng = rand::rng(); for _ in 0..100 { - let num_leafs = 2 + (rng.next_u32() as usize % 1000); + let num_leafs = 2 + rng.random_range(0..1000); let leaf_hashes = random_elements(num_leafs); let archival_mmr = get_mock_ammr_from_digests(leaf_hashes); - let leaf_index = (rng.next_u32() as usize % num_leafs) as u64; + let leaf_index = rng.random_range(0..num_leafs) as u64; let mp = archival_mmr.prove_membership(leaf_index); let mp_encoded = mp.encode(); let mp_decoded = *MmrMembershipProof::decode(&mp_encoded).unwrap(); diff --git a/twenty-first/src/util_types/mmr/shared_advanced.rs b/twenty-first/src/util_types/mmr/shared_advanced.rs index 4f98da61..5107f6d7 100644 --- a/twenty-first/src/util_types/mmr/shared_advanced.rs +++ b/twenty-first/src/util_types/mmr/shared_advanced.rs @@ -344,7 +344,7 @@ mod mmr_test { #[test] fn leaf_index_node_index_pbt() { - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for _ in 0..10_000 { let rand = rng.next_u32(); let inversion_result = node_index_to_leaf_index(leaf_index_to_node_index(rand as u64)); diff --git a/twenty-first/src/util_types/mmr/shared_basic.rs b/twenty-first/src/util_types/mmr/shared_basic.rs index c383e63a..0465c6db 100644 --- a/twenty-first/src/util_types/mmr/shared_basic.rs +++ b/twenty-first/src/util_types/mmr/shared_basic.rs @@ -141,7 +141,6 @@ pub fn calculate_new_peaks_from_leaf_mutation( mod mmr_test { use proptest::collection::vec; use proptest_arbitrary_interop::arb; - use rand::prelude::*; use test_strategy::proptest; use super::*; @@ -340,6 +339,6 @@ mod mmr_test { #[test] fn calculate_new_peaks_from_append_to_empty_mmra_does_not_crash() { - calculate_new_peaks_from_append(0, vec![], random()); + calculate_new_peaks_from_append(0, vec![], rand::random()); } } diff --git a/twenty-first/src/util_types/shared.rs b/twenty-first/src/util_types/shared.rs index 10dba4c4..ea9b423f 100644 --- a/twenty-first/src/util_types/shared.rs +++ b/twenty-first/src/util_types/shared.rs @@ -19,7 +19,6 @@ pub fn bag_peaks(peaks: &[Digest]) -> Digest { #[cfg(test)] mod tests { use insta::assert_snapshot; - use itertools::Itertools; use rand::prelude::*; use super::*; @@ -29,10 +28,10 @@ mod tests { let mut rng = StdRng::seed_from_u64(0x92ca758afeec6d29); assert_snapshot!(bag_peaks(&[]).0[0], @"14353333629925222640"); - assert_snapshot!(bag_peaks(&[rng.gen()]).0[0], @"17149516008269095361"); - assert_snapshot!(bag_peaks(&[rng.gen(), rng.gen()]).0[0], @"10916225144661041397"); + assert_snapshot!(bag_peaks(&[rng.random()]).0[0], @"17149516008269095361"); + assert_snapshot!(bag_peaks(&[rng.random(), rng.random()]).0[0], @"06487327802841213551"); - let peaks = (0..10).map(|_| rng.gen()).collect_vec(); - assert_snapshot!(bag_peaks(&peaks).0[0], @"07834432385918213217"); + let peaks: [Digest; 10] = rng.random(); + assert_snapshot!(bag_peaks(&peaks).0[0], @"08165051011961773585"); } } diff --git a/twenty-first/src/util_types/sponge.rs b/twenty-first/src/util_types/sponge.rs index f4686904..e13791ae 100644 --- a/twenty-first/src/util_types/sponge.rs +++ b/twenty-first/src/util_types/sponge.rs @@ -58,9 +58,9 @@ pub trait Sponge: Clone + Debug + Default + Send + Sync { mod tests { use std::ops::Mul; + use rand::distr::Distribution; + use rand::distr::StandardUniform; use rand::Rng; - use rand_distr::Distribution; - use rand_distr::Standard; use super::*; use crate::math::digest::Digest; @@ -72,16 +72,16 @@ mod tests { fn encode_prop(smallest: T, largest: T) where T: Eq + BFieldCodec, - Standard: Distribution, + StandardUniform: Distribution, { let smallest_seq = smallest.encode(); let largest_seq = largest.encode(); assert_ne!(smallest_seq, largest_seq); assert_eq!(smallest_seq.len(), largest_seq.len()); - let mut rng = rand::thread_rng(); - let random_a: T = rng.gen(); - let random_b: T = rng.gen(); + let mut rng = rand::rng(); + let random_a: T = rng.random(); + let random_b: T = rng.random(); if random_a != random_b { assert_ne!(random_a.encode(), random_b.encode());