blob: a03568e3102385bda6036baad28ef5994a5b6586 [file] [log] [blame]
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<Iterator<Item=Self>> {
Box::new((**self).shrink().map(Small))
}
}