我想为Quickcheck生成随机浮点数,这些浮点数限制在某个范围内,例如 0.0 到 1.0,用于测试处理概率的函数。我希望能够做一些成功的事情:
quickcheck! {
fn prop(x: f64, y: f64) -> bool {
assert!(x <= 1.0);
assert!(y <= 1.0);
(x * y < x) && (x * y < y)
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个代表你想要的范围的新类型,然后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)
}
}
Run Code Online (Sandbox Code Playgroud)
Arbitrary传递了一个实现的类型quickcheck::Gen,它是rand::Rng.
请注意,它Rng::gen_range有一个唯一的上限,所以这个例子并不完全是你想要的,但它显示了这个过程。
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |