diff options
Diffstat (limited to 'vendor/petgraph/tests/utils/qc.rs')
-rw-r--r-- | vendor/petgraph/tests/utils/qc.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/vendor/petgraph/tests/utils/qc.rs b/vendor/petgraph/tests/utils/qc.rs new file mode 100644 index 000000000..f33562528 --- /dev/null +++ b/vendor/petgraph/tests/utils/qc.rs @@ -0,0 +1,27 @@ +use quickcheck::{Arbitrary, Gen, StdGen}; +use std::ops::Deref; + +#[derive(Copy, Clone, Debug)] +/// quickcheck Arbitrary adaptor - half the size of `T` on average +pub struct Small<T>(pub T); + +impl<T> Deref for Small<T> { + type Target = T; + fn deref(&self) -> &T { + &self.0 + } +} + +impl<T> Arbitrary for Small<T> +where + T: Arbitrary, +{ + fn arbitrary<G: Gen>(g: &mut G) -> Self { + let sz = g.size() / 2; + Small(T::arbitrary(&mut StdGen::new(g, sz))) + } + + fn shrink(&self) -> Box<dyn Iterator<Item = Self>> { + Box::new((**self).shrink().map(Small)) + } +} |