scarlet_queen_initializer/
random.rs

1use rand::{
2    distr::{Distribution, StandardUniform},
3    rng, Rng,
4};
5use scarlet_queen_core::InitializerTrait;
6
7#[derive(Debug)]
8pub struct RandomInitializer<const N: usize> {}
9
10impl<T, const N: usize> InitializerTrait<T, N> for RandomInitializer<N>
11where
12    StandardUniform: Distribution<T>,
13{
14    fn initialize() -> [T; N] {
15        let mut rng = rng();
16        [0; N].map(|_| rng.random::<T>())
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use scarlet_queen_core::InitializerTrait;
23
24    use crate::random::RandomInitializer;
25
26    #[test]
27    fn test_initializer() {
28        let initialized: [u8; 10] =
29            <RandomInitializer<10> as InitializerTrait<u8, 10>>::initialize();
30        assert_eq!(initialized.len(), 10);
31    }
32}