pub fn rng() -> PrngExpand 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
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}