Skip to main content

rng

Function rng 

Source
pub fn rng() -> Prng
Expand description

Convenience constructor using system entropy.

Examples found in repository?
examples/random_demo.rs (line 17)
15fn basic_usage() {
16    println!("Basic PRNG usage\n----------------");
17    let mut prng = rng();
18    println!("random u64   : {}", prng.next_u64());
19    println!("range [10,20): {}", prng.random_range(10..20));
20    println!("bool         : {}", prng.gen_bool());
21}
22
23fn normal_demo() {
24    println!("Normal distribution\n-------------------");
25    let mut prng = rng();
26    for _ in 0..3 {
27        let v = prng.normal(0.0, 1.0);
28        println!("sample: {:.3}", v);
29    }
30}
31
32fn shuffle_demo() {
33    println!("Slice shuffling\n----------------");
34    let mut prng = rng();
35    let mut data = [1, 2, 3, 4, 5];
36    data.shuffle(&mut prng);
37    println!("shuffled: {:?}", data);
38
39    let mut secure = crypto_rng();
40    let byte = secure.random_range(0..256usize);
41    println!("crypto byte: {}", byte);
42}
More examples
Hide additional examples
examples/random_stats.rs (line 12)
10fn chi_square_demo() {
11    println!("Chi-square test on PRNG");
12    let mut rng = rng();
13    let mut counts = [0usize; 10];
14    let samples = 10000;
15    for _ in 0..samples {
16        let v = rng.random_range(0..10usize);
17        counts[v] += 1;
18    }
19    let expected = samples as f64 / 10.0;
20    let chi2: f64 = counts
21        .iter()
22        .map(|&c| {
23            let diff = c as f64 - expected;
24            diff * diff / expected
25        })
26        .sum();
27    println!("counts: {:?}", counts);
28    println!("chi-square: {:.3}", chi2);
29}
examples/game_of_life.rs (line 222)
218pub fn generate_glider(board: &mut BoolMatrix, board_size: usize) {
219    // Initialize with a Glider pattern.
220    // It demonstrates how to set specific cells in the matrix.
221    // This demonstrates `IndexMut` for `current_board[(r, c)] = true;`.
222    let mut rng = rng();
223    let r_offset = rng.random_range(0..(board_size - 3));
224    let c_offset = rng.random_range(0..(board_size - 3));
225    if board.rows() >= r_offset + 3 && board.cols() >= c_offset + 3 {
226        board[(r_offset + 0, c_offset + 1)] = true;
227        board[(r_offset + 1, c_offset + 2)] = true;
228        board[(r_offset + 2, c_offset + 0)] = true;
229        board[(r_offset + 2, c_offset + 1)] = true;
230        board[(r_offset + 2, c_offset + 2)] = true;
231    }
232}
233
234pub fn generate_pulsar(board: &mut BoolMatrix, board_size: usize) {
235    // Initialize with a Pulsar pattern.
236    // This demonstrates how to set specific cells in the matrix.
237    // This demonstrates `IndexMut` for `current_board[(r, c)] = true;`.
238    let mut rng = rng();
239    let r_offset = rng.random_range(0..(board_size - 17));
240    let c_offset = rng.random_range(0..(board_size - 17));
241    if board.rows() >= r_offset + 17 && board.cols() >= c_offset + 17 {
242        let pulsar_coords = [
243            (2, 4),
244            (2, 5),
245            (2, 6),
246            (2, 10),
247            (2, 11),
248            (2, 12),
249            (4, 2),
250            (4, 7),
251            (4, 9),
252            (4, 14),
253            (5, 2),
254            (5, 7),
255            (5, 9),
256            (5, 14),
257            (6, 2),
258            (6, 7),
259            (6, 9),
260            (6, 14),
261            (7, 4),
262            (7, 5),
263            (7, 6),
264            (7, 10),
265            (7, 11),
266            (7, 12),
267        ];
268        for &(dr, dc) in pulsar_coords.iter() {
269            board[(r_offset + dr, c_offset + dc)] = true;
270        }
271    }
272}