Closed vi closed 6 years ago
For reference, the source:
extern crate quickcheck;
#[macro_use] extern crate custom_derive;
use quickcheck::Arbitrary;
custom_derive! {
#[derive(Clone,Debug)]
struct Mumu {
a : u32,
b : String,
}
}
#[derive(Clone,Debug)]
enum Qqq {
Lol,
Ror,
Kokoko(Mumu),
Totot(u32),
}
impl Arbitrary for Mumu {
fn arbitrary<G : quickcheck::Gen>(g:&mut G) -> Mumu {
Mumu {a : Arbitrary::arbitrary(g), b : Arbitrary::arbitrary(g) }
}
fn shrink(&self) -> Box<Iterator<Item=Self>> {
Box::new ( (self.a.clone(), self.b.clone()).shrink().map(|(aa,bb)| Mumu { a: aa, b:bb}))
}
}
impl Arbitrary for Qqq {
fn arbitrary<G : quickcheck::Gen>(g:&mut G) -> Qqq {
let y = g.next_u32() % 4;
match y {
0 => Qqq::Lol,
1 => Qqq::Ror,
2 => Qqq::Kokoko(Arbitrary::arbitrary(g)),
3 => Qqq::Totot(Arbitrary::arbitrary(g)),
_ => panic!(),
}
}
fn shrink(&self) -> Box<Iterator<Item=Self>> {
match self {
&Qqq::Totot(ref x) => Box::new(x.shrink().map(|s| Qqq::Totot(s))),
&Qqq::Kokoko(ref x) => Box::new(x.shrink().map(|s| Qqq::Kokoko(s))),
_ => quickcheck::empty_shrinker(),
}
}
}
#[test]
fn it_works() {
fn qqq(x : Qqq) -> bool {
if let Qqq::Kokoko(Mumu { a : v, b: bb }) = x {
//println!("{}\n", bb);
return v != 4 && bb.chars().nth(1).unwrap_or('4') != '1'
}
true
}
quickcheck::QuickCheck::new().tests(10_000_000).quickcheck(qqq as fn(Qqq) -> bool);
/*quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);
quickcheck::QuickCheck::new().tests(1000_000_000).quickcheck(qqq as fn(Qqq) -> bool);*/
}
I think this should be fixed now. @vi can you confirm?
Version is 43665bd4bbe42369ead4e8d1c53e70d76fccef44 (plus #116 ).