7个稳定版本
使用旧的Rust 2015
2.0.0 | 2018年1月21日 |
---|---|
1.0.5 | 2018年1月12日 |
1.0.4 | 2017年12月17日 |
1.0.3 | 2017年12月16日 |
#765 在 测试
每月57次下载
20KB
121 行
proptest-quickcheck-interop
proptest
是一个属性测试框架(即 QuickCheck
系列),灵感来自 Hypothesis 框架。
quickcheck
是另一个Rust的属性测试框架,它使用类似于Haskell的 QuickCheck
的缩小逻辑。
此Crate提供quickcheck和proptest之间的互操作性。 目前,这是一个单向过程——如果您已经实现了quickcheck的 Arbitrary
trait以及 Debug
(这是一个临时要求),那么您可以在proptest中获得等效的 Strategy
。
此Crate的状态
此Crate不太可能出现重大变化。任何破坏性更改都可能仅是此Crate使用的依赖项(特别是proptest或quickcheck)更改的结果。当这些Crate中的任何一个进行破坏性更改并影响此Crate时,则此Crate的主版本号将增加。
请参阅 变更日志 以获取所有重大历史更改的完整列表,包括破坏性和其他更改。
使用互操作性层
假设您已经在项目中有一个包含以下内容的 Cargo.toml
文件
[dependencies]
quickcheck = "0.6.0"
proptest = "0.4.1"
现在将此Crate添加到依赖项中
[dependencies]
quickcheck = "0.6.0"
proptest = "0.4.1"
proptest_quickcheck_interop = "2.0.0"
现在假设 usize
是一个复杂类型,您已经为它实现了 quickcheck::Arbitrary
。您希望将其重用于proptest或如果您只是更喜欢quickcheck提供的实现。为此,您可以使用 from_qc
// Import crates:
#[macro_use] extern crate proptest;
extern crate proptest_quickcheck_interop as pqci;
// And what we need into our scope:
use proptest::strategy::Strategy;
use pqci::from_qc;
/// Given a usize returns the nearest usize that is also even.
fn make_even(x: usize) -> usize {
if x % 2 == 1 { x - 1 } else { x }
}
proptest! {
/// A property asserting that make_even always produces an even usize.
fn always_even(ref x in from_qc::<usize>().prop_map(make_even)) {
prop_assert!(x % 2 == 0);
}
}
fn main() {
always_even();
}
如果您想控制 quickcheck 生成的输入的 size
,可以使用 from_qc_sized(size)
。如果您使用 from_qc
,则使用 quickcheck 默认的大小。
贡献
除非您明确说明,否则您提交的任何有意包含在作品中的贡献,根据 Apache-2.0 许可证定义,将如上双许可,不附加任何额外的条款或条件。
依赖项
~3.5MB
~77K SLoC