Coverage Report

Created: 2025-11-16 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/indexmap-2.12.0/src/arbitrary.rs
Line
Count
Source
1
#[cfg(feature = "arbitrary")]
2
#[cfg_attr(docsrs, doc(cfg(feature = "arbitrary")))]
3
mod impl_arbitrary {
4
    use crate::{IndexMap, IndexSet};
5
    use arbitrary::{Arbitrary, Result, Unstructured};
6
    use core::hash::{BuildHasher, Hash};
7
8
    impl<'a, K, V, S> Arbitrary<'a> for IndexMap<K, V, S>
9
    where
10
        K: Arbitrary<'a> + Hash + Eq,
11
        V: Arbitrary<'a>,
12
        S: BuildHasher + Default,
13
    {
14
0
        fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
15
0
            u.arbitrary_iter()?.collect()
16
0
        }
Unexecuted instantiation: <indexmap::map::IndexMap<naga::arena::handle::Handle<naga::ir::Expression>, alloc::string::String, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<naga::arena::handle::Handle<naga::ir::GlobalVariable>, alloc::vec::Vec<alloc::string::String>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<naga::arena::handle::Handle<naga::ir::Type>, alloc::vec::Vec<alloc::string::String>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<naga::arena::handle::Handle<naga::ir::Constant>, alloc::vec::Vec<alloc::string::String>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<naga::arena::handle::Handle<naga::ir::Function>, alloc::vec::Vec<alloc::string::String>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<naga::ir::PredeclaredType, naga::arena::handle::Handle<naga::ir::Type>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<(naga::arena::handle::Handle<naga::ir::Type>, usize), alloc::vec::Vec<alloc::string::String>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
Unexecuted instantiation: <indexmap::map::IndexMap<usize, alloc::vec::Vec<alloc::string::String>, core::hash::BuildHasherDefault<rustc_hash::FxHasher>> as arbitrary::Arbitrary>::arbitrary
17
18
0
        fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self> {
19
0
            u.arbitrary_take_rest_iter()?.collect()
20
0
        }
21
    }
22
23
    impl<'a, T, S> Arbitrary<'a> for IndexSet<T, S>
24
    where
25
        T: Arbitrary<'a> + Hash + Eq,
26
        S: BuildHasher + Default,
27
    {
28
        fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
29
            u.arbitrary_iter()?.collect()
30
        }
31
32
        fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self> {
33
            u.arbitrary_take_rest_iter()?.collect()
34
        }
35
    }
36
}
37
38
#[cfg(feature = "quickcheck")]
39
#[cfg_attr(docsrs, doc(cfg(feature = "quickcheck")))]
40
mod impl_quickcheck {
41
    use crate::{IndexMap, IndexSet};
42
    use alloc::boxed::Box;
43
    use alloc::vec::Vec;
44
    use core::hash::{BuildHasher, Hash};
45
    use quickcheck::{Arbitrary, Gen};
46
47
    impl<K, V, S> Arbitrary for IndexMap<K, V, S>
48
    where
49
        K: Arbitrary + Hash + Eq,
50
        V: Arbitrary,
51
        S: BuildHasher + Default + Clone + 'static,
52
    {
53
        fn arbitrary(g: &mut Gen) -> Self {
54
            Self::from_iter(Vec::arbitrary(g))
55
        }
56
57
        fn shrink(&self) -> Box<dyn Iterator<Item = Self>> {
58
            let vec = Vec::from_iter(self.clone());
59
            Box::new(vec.shrink().map(Self::from_iter))
60
        }
61
    }
62
63
    impl<T, S> Arbitrary for IndexSet<T, S>
64
    where
65
        T: Arbitrary + Hash + Eq,
66
        S: BuildHasher + Default + Clone + 'static,
67
    {
68
        fn arbitrary(g: &mut Gen) -> Self {
69
            Self::from_iter(Vec::arbitrary(g))
70
        }
71
72
        fn shrink(&self) -> Box<dyn Iterator<Item = Self>> {
73
            let vec = Vec::from_iter(self.clone());
74
            Box::new(vec.shrink().map(Self::from_iter))
75
        }
76
    }
77
}