use crate::data::arbitrary::ArbitrarySpecs;
use arbitrary::{Result, Unstructured};
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
pub struct ArraySpecs<S, const N: usize> {
pub element_specs: S,
}
impl<'a, S, const N: usize> ArbitrarySpecs<'a> for ArraySpecs<S, N>
where
S: ArbitrarySpecs<'a>,
S::Output: Default,
{
type Output = [S::Output; N];
#[inline]
fn make_arbitrary(&self, u: &mut Unstructured<'a>) -> Result<Self::Output> {
let mut arr = std::array::from_fn(|_| Default::default());
for val in &mut arr {
*val = self.element_specs.make_arbitrary(u)?;
}
Ok(arr)
}
}