1use crate::{enum_map, EnumArray, EnumMap};
7use arbitrary::{Arbitrary, Result, Unstructured};
8
9impl<'a, K: EnumArray<V>, V: Arbitrary<'a>> Arbitrary<'a> for EnumMap<K, V> {
11 fn arbitrary(u: &mut Unstructured<'a>) -> Result<EnumMap<K, V>> {
12 Ok(enum_map! {
13 _ => Arbitrary::arbitrary(u)?,
14 })
15 }
16
17 fn size_hint(depth: usize) -> (usize, Option<usize>) {
18 if K::LENGTH == 0 {
19 (0, Some(0))
20 } else {
21 let (lo, hi) = V::size_hint(depth);
22 (
23 lo.saturating_mul(K::LENGTH),
24 hi.and_then(|hi| hi.checked_mul(K::LENGTH)),
25 )
26 }
27 }
28}