2017-07-07 38 views

回答

3

創建一個新的類型,代表你所期望的範圍,然後實現quickcheck::Arbitrary

#[macro_use] 
extern crate quickcheck; 

#[derive(Debug, Copy, Clone)] 
struct Probability(f64); 

impl quickcheck::Arbitrary for Probability { 
    fn arbitrary<G: quickcheck::Gen>(g: &mut G) -> Self { 
     Probability(g.gen_range(0.0, 1.0)) 
    } 
} 

quickcheck! { 
    fn prop(x: Probability, y: Probability) -> bool { 
     let x = x.0; 
     let y = y.0; 

     assert!(x <= 1.0); 
     assert!(y <= 1.0); 

     (x * y < x) && (x * y < y) 
    } 
} 

Arbitrary被傳遞的類型實施quickcheck::Gen,這是在rand::Rng之上的輕包裝。

請注意Rng::gen_range有一個獨家上限,所以這個例子並不完全是你想要的,但它顯示了過程。