#属性测试 #quickcheck #properties #hypothesis

proptest-quickcheck-interop

提供在proptest中重用quickcheck::Arbitrary实现的可互操作性层

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测试

Download history 23/week @ 2024-02-23 23/week @ 2024-03-01 9/week @ 2024-03-08 2/week @ 2024-03-15

每月57次下载

MIT/Apache

20KB
121

proptest-quickcheck-interop

Build Status

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