1use core::f64::consts::PI;
4use rand::Rng;
5
6pub fn pi(rng: &mut impl Rng) -> String {
7 let mut pi_string = format!("{:.15}", core::f64::consts::PI); if rng.random_bool(PI.fract()) {
11 let digits: Vec<char> = pi_string.chars().collect();
12
13 let idx = rng.random_range(2..digits.len());
15 let new_digit = rng.random_range(0..10).to_string().chars().next().unwrap();
16
17 let mut new_pi_string = digits.clone();
18 new_pi_string[idx] = new_digit;
19 pi_string = new_pi_string.iter().collect();
20 }
21
22 pi_string
23}
24
25pub fn get_random_ipv4(rng: &mut impl Rng) -> String {
26 let octet1: u8 = rng.random_range(0..=255);
27 let octet2: u8 = rng.random_range(0..=255);
28 let octet3: u8 = rng.random_range(0..=255);
29 let octet4: u8 = rng.random_range(0..=255);
30
31 format!("{}.{}.{}.{}", octet1, octet2, octet3, octet4)
32}
33
34#[cfg(test)]
35mod test {
36 use rand::{SeedableRng, rngs::StdRng};
37
38 use super::*;
39
40 #[test]
41 fn test_pi() {
42 let seed: u64 = 12345;
43 let mut rng = StdRng::seed_from_u64(seed);
44 let pi = pi(&mut rng)
45 .parse::<f64>()
46 .expect("HEY!! pi() returned non f64 value!");
47 assert_eq!(pi, PI);
48 }
49
50 }