1 use super::{biguint_from_vec, BigUint};
2 
3 use crate::big_digit::BigDigit;
4 #[cfg(feature = "quickcheck")]
5 use crate::std_alloc::Box;
6 use crate::std_alloc::Vec;
7 
8 #[cfg(feature = "quickcheck")]
9 impl quickcheck::Arbitrary for BigUint {
arbitrary(g: &mut quickcheck::Gen) -> Self10     fn arbitrary(g: &mut quickcheck::Gen) -> Self {
11         // Use arbitrary from Vec
12         biguint_from_vec(Vec::<BigDigit>::arbitrary(g))
13     }
14 
shrink(&self) -> Box<dyn Iterator<Item = Self>>15     fn shrink(&self) -> Box<dyn Iterator<Item = Self>> {
16         // Use shrinker from Vec
17         Box::new(self.data.shrink().map(biguint_from_vec))
18     }
19 }
20 
21 #[cfg(feature = "arbitrary")]
22 impl arbitrary::Arbitrary<'_> for BigUint {
arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self>23     fn arbitrary(u: &mut arbitrary::Unstructured<'_>) -> arbitrary::Result<Self> {
24         Ok(biguint_from_vec(Vec::<BigDigit>::arbitrary(u)?))
25     }
26 
arbitrary_take_rest(u: arbitrary::Unstructured<'_>) -> arbitrary::Result<Self>27     fn arbitrary_take_rest(u: arbitrary::Unstructured<'_>) -> arbitrary::Result<Self> {
28         Ok(biguint_from_vec(Vec::<BigDigit>::arbitrary_take_rest(u)?))
29     }
30 
size_hint(depth: usize) -> (usize, Option<usize>)31     fn size_hint(depth: usize) -> (usize, Option<usize>) {
32         Vec::<BigDigit>::size_hint(depth)
33     }
34 }
35