diff --git a/Cargo.toml b/Cargo.toml index 9c8887431..bcf9a7615 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -329,6 +329,7 @@ pin_same-file = { version="1.0.4, < 1.0.6", package="same-file" } ## same-file v pin_winapi-util = { version="0.1.2, < 0.1.3", package="winapi-util" } ## winapi-util v0.1.3 has compiler errors for MinRustV v1.32.0, expects 1.34 [dev-dependencies] +conv = "0.3" filetime = "0.2" libc = "0.2" rand = "0.7" diff --git a/tests/by-util/test_factor.rs b/tests/by-util/test_factor.rs index 33c184ba0..5bde17cdb 100644 --- a/tests/by-util/test_factor.rs +++ b/tests/by-util/test_factor.rs @@ -10,15 +10,15 @@ use std::time::SystemTime; #[path = "../../src/uu/factor/sieve.rs"] mod sieve; -use self::sieve::Sieve; +extern crate conv; extern crate rand; + use self::rand::distributions::{Distribution, Uniform}; use self::rand::{rngs::SmallRng, Rng, SeedableRng}; +use self::sieve::Sieve; const NUM_PRIMES: usize = 10000; -const LOG_PRIMES: f64 = 14.0; // ceil(log2(NUM_PRIMES)) - const NUM_TESTS: usize = 100; #[test] @@ -44,6 +44,9 @@ fn test_first_100000_integers() { #[test] fn test_random() { + use conv::prelude::*; + + let log_num_primes = f64::value_from(NUM_PRIMES).unwrap().log2().ceil(); let primes = Sieve::primes().take(NUM_PRIMES).collect::>(); let rng_seed = SystemTime::now() @@ -51,16 +54,16 @@ fn test_random() { .unwrap() .as_secs(); println!("rng_seed={:?}", rng_seed); - let mut rng = SmallRng::seed_from_u64(rng_seed); + let mut rand_gt = move |min: u64| { - let mut product = 1u64; + let mut product = 1_u64; let mut factors = Vec::new(); while product < min { // log distribution---higher probability for lower numbers let factor; loop { - let next = rng.gen_range(0f64, LOG_PRIMES).exp2().floor() as usize; + let next = rng.gen_range(0_f64, log_num_primes).exp2().floor() as usize; if next < NUM_PRIMES { factor = primes[next]; break; @@ -106,7 +109,8 @@ fn test_random_big() { .as_secs(); println!("rng_seed={:?}", rng_seed); let mut rng = SmallRng::seed_from_u64(rng_seed); - let bitrange_1 = Uniform::new(14usize, 51); + + let bitrange_1 = Uniform::new(14_usize, 51); let mut rand_64 = move || { // first, choose a random number of bits for the first factor let f_bit_1 = bitrange_1.sample(&mut rng); @@ -116,11 +120,11 @@ fn test_random_big() { // we will have a number of additional factors equal to nfacts + 1 // where nfacts is in [0, floor(rem/14) ) NOTE half-open interval // Each prime factor is at least 14 bits, hence floor(rem/14) - let nfacts = Uniform::new(0usize, rem / 14).sample(&mut rng); + let nfacts = Uniform::new(0_usize, rem / 14).sample(&mut rng); // we have to distribute extrabits among the (nfacts + 1) values let extrabits = rem - (nfacts + 1) * 14; // (remember, a Range is a half-open interval) - let extrarange = Uniform::new(0usize, extrabits + 1); + let extrarange = Uniform::new(0_usize, extrabits + 1); // to generate an even split of this range, generate n-1 random elements // in the range, add the desired total value to the end, sort this list, @@ -147,7 +151,7 @@ fn test_random_big() { let f_bits = f_bits; let mut nbits = 0; - let mut product = 1u64; + let mut product = 1_u64; let mut factors = Vec::new(); for bit in f_bits { assert!(bit < 37);