1#[cfg(test)]
2pub mod test {
3 use crate::abstractions::{bit::Bit, bitvec::BitVec, funarr::FunArray};
4 use rand::prelude::*;
5
6 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::*;