cs431_homework/test/
rand.rs1use rand::Rng;
4use rand::distr::Alphanumeric;
5use rand::rngs::ThreadRng;
6
7pub trait RandGen {
9 fn rand_gen(rng: &mut ThreadRng) -> Self;
11}
12
13const KEY_MAX_LENGTH: usize = 4;
14
15impl RandGen for String {
16 fn rand_gen(rng: &mut ThreadRng) -> Self {
17 let length = (rng.random::<u64>() as usize) % KEY_MAX_LENGTH;
18 rng.sample_iter(&Alphanumeric)
19 .take(length)
20 .map(|x| x as char)
21 .collect()
22 }
23}
24
25impl RandGen for usize {
26 fn rand_gen(rng: &mut ThreadRng) -> Self {
28 const MASK: usize = 0x4004004004007777usize;
29 (rng.random::<u64>() as usize) & MASK
30 }
31}
32
33impl RandGen for u32 {
34 fn rand_gen(rng: &mut ThreadRng) -> Self {
36 const MASK: u32 = 0x66666666u32;
37 rng.random::<u32>() & MASK
38 }
39}
40
41impl RandGen for u8 {
42 fn rand_gen(rng: &mut ThreadRng) -> Self {
43 rng.random::<u8>()
44 }
45}
46
47impl RandGen for () {
48 fn rand_gen(_rng: &mut ThreadRng) -> Self {}
49}