core_models/
helpers.rs

1#[cfg(test)]
2pub mod test {
3    use crate::abstractions::{bit::Bit, bitvec::BitVec, funarr::FunArray};
4    use rand::prelude::*;
5
6    /// Helper trait to generate random values
7    pub trait HasRandom {
8        fn random() -> Self;
9    }
10    macro_rules! mk_has_random {
11        ($($ty:ty),*) => {
12            $(impl HasRandom for $ty {
13                fn random() -> Self {
14                    let mut rng = rand::rng();
15                    rng.random()
16                }
17            })*
18        };
19    }
20
21    mk_has_random!(bool);
22    mk_has_random!(i8, i16, i32, i64, i128);
23    mk_has_random!(u8, u16, u32, u64, u128);
24
25    impl HasRandom for isize {
26        fn random() -> Self {
27            i128::random() as isize
28        }
29    }
30    impl HasRandom for usize {
31        fn random() -> Self {
32            i128::random() as usize
33        }
34    }
35
36    impl HasRandom for Bit {
37        fn random() -> Self {
38            crate::abstractions::bit::Bit::from(bool::random())
39        }
40    }
41    impl<const N: u64> HasRandom for BitVec<N> {
42        fn random() -> Self {
43            Self::from_fn(|_| Bit::random())
44        }
45    }
46
47    impl<const N: u64, T: HasRandom> HasRandom for FunArray<N, T> {
48        fn random() -> Self {
49            FunArray::from_fn(|_| T::random())
50        }
51    }
52}
53
54#[cfg(test)]
55pub use test::*;