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