mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 04:19:59 +00:00
68 lines
1.7 KiB
Rust
68 lines
1.7 KiB
Rust
use rustframe::random::{crypto_rng, rng, Rng, SliceRandom};
|
|
|
|
/// Demonstrates basic usage of the random number generators.
|
|
///
|
|
/// It showcases uniform ranges, booleans, normal distribution,
|
|
/// shuffling and the cryptographically secure generator.
|
|
fn main() {
|
|
basic_usage();
|
|
println!("\n-----\n");
|
|
normal_demo();
|
|
println!("\n-----\n");
|
|
shuffle_demo();
|
|
}
|
|
|
|
fn basic_usage() {
|
|
println!("Basic PRNG usage\n----------------");
|
|
let mut prng = rng();
|
|
println!("random u64 : {}", prng.next_u64());
|
|
println!("range [10,20): {}", prng.random_range(10..20));
|
|
println!("bool : {}", prng.gen_bool());
|
|
}
|
|
|
|
fn normal_demo() {
|
|
println!("Normal distribution\n-------------------");
|
|
let mut prng = rng();
|
|
for _ in 0..3 {
|
|
let v = prng.normal(0.0, 1.0);
|
|
println!("sample: {:.3}", v);
|
|
}
|
|
}
|
|
|
|
fn shuffle_demo() {
|
|
println!("Slice shuffling\n----------------");
|
|
let mut prng = rng();
|
|
let mut data = [1, 2, 3, 4, 5];
|
|
data.shuffle(&mut prng);
|
|
println!("shuffled: {:?}", data);
|
|
|
|
let mut secure = crypto_rng();
|
|
let byte = secure.random_range(0..256usize);
|
|
println!("crypto byte: {}", byte);
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use rustframe::random::{CryptoRng, Prng};
|
|
|
|
#[test]
|
|
fn test_basic_usage_range_bounds() {
|
|
let mut rng = Prng::new(1);
|
|
for _ in 0..50 {
|
|
let v = rng.random_range(5..10);
|
|
assert!(v >= 5 && v < 10);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_crypto_byte_bounds() {
|
|
let mut rng = CryptoRng::new();
|
|
for _ in 0..50 {
|
|
let v = rng.random_range(0..256usize);
|
|
assert!(v < 256);
|
|
}
|
|
}
|
|
}
|
|
|