1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

tests/factor ~ update RNG usage and variable reports to ease debugging

This commit is contained in:
Roy Ivy III 2020-10-07 22:01:09 -05:00
parent 3bb3080170
commit 2615abe9cc
2 changed files with 18 additions and 6 deletions

View file

@ -331,7 +331,7 @@ pin_winapi-util = { version="0.1.2, < 0.1.3", package="winapi-util" } ## winapi-
[dev-dependencies] [dev-dependencies]
filetime = "0.2" filetime = "0.2"
libc = "0.2" libc = "0.2"
rand = "0.6" rand = "0.7"
regex = "1.0" regex = "1.0"
tempfile = "3.1" tempfile = "3.1"
time = "0.1" time = "0.1"

View file

@ -6,6 +6,7 @@
// that was distributed with this source code. // that was distributed with this source code.
use crate::common::util::*; use crate::common::util::*;
use std::time::SystemTime;
#[path = "../../src/uu/factor/sieve.rs"] #[path = "../../src/uu/factor/sieve.rs"]
mod sieve; mod sieve;
@ -13,7 +14,7 @@ use self::sieve::Sieve;
extern crate rand; extern crate rand;
use self::rand::distributions::{Distribution, Uniform}; use self::rand::distributions::{Distribution, Uniform};
use self::rand::{rngs::SmallRng, FromEntropy, Rng}; use self::rand::{rngs::SmallRng, Rng, SeedableRng};
const NUM_PRIMES: usize = 10000; const NUM_PRIMES: usize = 10000;
const LOG_PRIMES: f64 = 14.0; // ceil(log2(NUM_PRIMES)) const LOG_PRIMES: f64 = 14.0; // ceil(log2(NUM_PRIMES))
@ -24,8 +25,13 @@ const NUM_TESTS: usize = 100;
fn test_random() { fn test_random() {
let primes = Sieve::primes().take(NUM_PRIMES).collect::<Vec<u64>>(); let primes = Sieve::primes().take(NUM_PRIMES).collect::<Vec<u64>>();
let mut rng = SmallRng::from_entropy(); let rng_seed = SystemTime::now()
println!("(seed) rng={:?}", rng); .duration_since(SystemTime::UNIX_EPOCH)
.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 rand_gt = move |min: u64| {
let mut product = 1u64; let mut product = 1u64;
let mut factors = Vec::new(); let mut factors = Vec::new();
@ -73,8 +79,12 @@ fn test_random() {
#[test] #[test]
fn test_random_big() { fn test_random_big() {
let mut rng = SmallRng::from_entropy(); let rng_seed = SystemTime::now()
println!("(seed) rng={:?}", rng); .duration_since(SystemTime::UNIX_EPOCH)
.unwrap()
.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(14usize, 51);
let mut rand_64 = move || { let mut rand_64 = move || {
// first, choose a random number of bits for the first factor // first, choose a random number of bits for the first factor
@ -161,6 +171,8 @@ fn test_big_primes() {
} }
fn run(instring: &[u8], outstring: &[u8]) { fn run(instring: &[u8], outstring: &[u8]) {
println!("STDIN='{}'", String::from_utf8_lossy(instring));
println!("STDOUT(expected)='{}'", String::from_utf8_lossy(outstring));
// now run factor // now run factor
new_ucmd!() new_ucmd!()
.pipe_in(instring) .pipe_in(instring)