r_tool/core/
random_util.rs1use rand::Rng;
2
3pub struct RandomUtil;
4
5impl RandomUtil {
6 pub fn random_int(min: i32, max: i32) -> i32 {
17 let mut rng = rand::thread_rng();
18 rng.gen_range(min..=max)
19 }
20
21 pub fn random_float(min: f64, max: f64) -> f64 {
32 let mut rng = rand::thread_rng();
33 rng.gen_range(min..=max)
34 }
35
36 pub fn random_bool() -> bool {
42 let mut rng = rand::thread_rng();
43 rng.gen()
44 }
45
46 pub fn random_char() -> char {
52 let mut rng = rand::thread_rng();
53 rng.gen_range(b'a'..=b'z') as char
54 }
55
56 pub fn random_string(length: usize) -> String {
66 let mut rng = rand::thread_rng();
67 let characters: Vec<char> = (0..length)
68 .map(|_| {
69 let category = rng.gen_range(0..3);
70 match category {
71 0 => rng.gen_range(b'a'..=b'z') as char,
72 1 => rng.gen_range(b'A'..=b'Z') as char,
73 2 => rng.gen_range(b'0'..=b'9') as char,
74 _ => unreachable!(),
75 }
76 })
77 .collect();
78
79 characters.into_iter().collect()
80 }
81}
82
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87
88 #[test]
89 fn test_random_int() {
90 let random_int = RandomUtil::random_int(1, 100);
91 assert!(random_int >= 1 && random_int <= 100);
92 }
93
94 #[test]
95 fn test_random_float() {
96 let random_float = RandomUtil::random_float(1.0, 100.0);
97 assert!(random_float >= 1.0 && random_float <= 100.0);
98 }
99
100 #[test]
101 fn test_random_bool() {
102 let random_bool = RandomUtil::random_bool();
103 assert!(random_bool == true || random_bool == false);
104 }
105
106 #[test]
107 fn test_random_char() {
108 let random_char = RandomUtil::random_char();
109 assert!((b'a'..=b'z').contains(&(random_char as u8)));
110 }
111
112 #[test]
113 fn test_random_string() {
114 let random_string = RandomUtil::random_string(10);
115 assert_eq!(random_string.len(), 10);
116 }
117}