主要观点:介绍了falsify
属性测试库,包括其基于样本树的定义、与Hypothesis
的区别、各种特性及使用方法。
关键信息:
falsify
通过解析样本树进行生成和收缩,与Hypothesis
中基于线性流的样本处理不同。- 内部收缩可跨monadic bind,解决了
QuickCheck
中集成收缩的问题。 - 选择性函子用于控制生成器的独立性,避免不必要的样本树收缩。
- 提供多种生成器和组合器,如
integral
、bool
、choose
等,可用于生成不同类型的数据。 - 可测试收缩行为,通过
testShrinkingOfGen
和testMinimum
等函数检查生成器的收缩效果。 - 提供与
QuickCheck
和hedgehog
风格收缩的兼容性组合器。
重要细节: Gen
的定义基于无限样本树,每个生成器针对不同子树运行并更新。- 在处理无限样本树时,
falsify
使用偏序关系进行收缩,而Hypothesis
使用全序关系。 - 示例中展示了如何使用
falsify
进行各种属性测试,如测试乘法结果的奇偶性、生成和测试函数等。 - 解释了
falsify
在处理生成器和收缩时的一些注意事项和限制,如避免生成后丢弃值、单次收缩步骤等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。