polygon-art/src/extensions/random_ext.rs

50 lines
1.2 KiB
Rust

use rand::rngs::StdRng;
use rand::Rng;
pub trait RandomExt<T> {
fn gen_interval(&mut self, min: T, max: T) -> T;
}
impl RandomExt<f32> for StdRng {
fn gen_interval(&mut self, min: f32, max: f32) -> f32 {
if min == max {
return min;
}
let minimum = f32::min(min, max);
let maximum = f32::max(min, max);
let diff = maximum - minimum;
let x: f32 = self.gen();
x * diff + minimum
}
}
impl RandomExt<f64> for StdRng {
fn gen_interval(&mut self, min: f64, max: f64) -> f64 {
if min == max {
return min;
}
let minimum = f64::min(min, max);
let maximum = f64::max(min, max);
let diff = maximum - minimum;
let x: f64 = self.gen();
x * diff + minimum
}
}
#[cfg(test)]
mod test {
use rand::prelude::StdRng;
use rand::{Rng, SeedableRng};
#[test]
fn test_gen() {
let random_seed = rand::random();
let mut rng = StdRng::seed_from_u64(random_seed);
for _ in 0..1000 {
let random_number: f64 = rng.gen();
assert!(random_number < 1.);
assert!(random_number > 0.);
}
}
}