#property-testing #properties #hypothesis #quickcheck #arbitrary

proptest-arbitrary

proptest的Arbitrary特性和标准库的实现

4个版本

使用旧的Rust 2015

0.2.2 2018年1月8日
0.2.1 2017年12月13日
0.2.0 2017年12月12日
0.1.0 2017年9月19日

#822 in 测试

32 每月下载量

MIT/Apache

100KB
2K SLoC

Proptest, Arbitrary

注意:此版本仍然是WIP;不要使用,只是在crates.io上预留。

Proptest是一个属性测试框架(即QuickCheck家族),灵感来自Hypothesis框架(Python)。

此crate,proptest-arbitrary,还提供了一个Arbitrary特质,允许你对每种类型有一个规范化的Strategy。这相当于Haskell QuickCheck的Arbitrary实现。在这个对Arbitrary的解释中,Strategy相当于Gen monad。

Arbitrary当前实现如下:

/// Arbitrary determines a canonical Strategy [..]
pub trait Arbitrary<'a> : Sized + Debug {
   fn arbitrary() -> Self::Strategy {
       Self::arbitrary_with(Default::default())
   }

   fn arbitrary_with(args: Self::Parameters) -> Self::Strategy;

   type Parameters: Default;

    type Strategy: Strategy<Value = Self::ValueTree>;

    /// NOTE:
    /// This type should NOT be relied upon outside of this crate
    /// other than for implementing `Arbitrary` for other types.
    type ValueTree: ValueTree<Value = Self>;

}

此crate的状态

此crate目前处于实验阶段。希望将来会被包含在proptest中。

当前[Arbitrary]特质的定义可能会在Rust中存在类型之后发生变化。然而,只要你不依赖Arbitrary在调用Arbitrary时具有关联类型,实际上这不应该是一个问题。

此crate主要只包含Arbitrary及其实现。因此,不太可能看到破坏性的变化。如果发生任何变化,它可能是针对常见类型的新实现或新类型。

请参阅变更日志以获取所有重大历史变化的完整列表,包括破坏性和其他类型的变更。

致谢

待办事项

贡献

除非你明确声明,否则,你提交的任何贡献(根据Apache-2.0许可定义的工作)将被双重许可,如上所述,没有任何附加条款或条件。

依赖关系

~5MB
~116K SLoC