我想为 Quickcheck 生成随机 float 限制在一定范围内,例如 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)
}
}
最佳答案
创建一个代表你想要的范围的新类型,然后实现 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
有一个唯一的上限,所以这个例子并不是您想要的,但它显示了过程。
关于testing - 如何将 Quickcheck 生成的 float 限制在一个范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44971963/