mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-10-04 22:39:26 +00:00
Add examples for random number generation and statistical tests
This commit is contained in:
67
examples/random_demo.rs
Normal file
67
examples/random_demo.rs
Normal file
@@ -0,0 +1,67 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user