testing - 如何将 Quickcheck 生成的 float 限制在一个范围内?

标签 testing rust

我想为 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/

相关文章:

rust - Rust Serde反序列化混合数组

unit-testing - 在单独的文件中运行 Rust 测试

java - Testng 中带有数组 arraylist 的数据提供者

testing - Katalon 自定义 "uploadFiles"关键字未加载文件

apache - 使用数据库示例数据生成负载的工具

python - 通过 pickle(或其他)将 json 数据从 python 传递到 rust

rust - Tokio 任务在完成前退出

rust - 实现 Sync 特征是否会改变编译器输出?

git - 修补程序分支的单独环境?

django RequestFactory 文件上传