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