伪造:用于 Haskell 的受假设启发的收缩

主要观点:介绍了falsify属性测试库,包括其基于样本树的定义、与Hypothesis的区别、各种特性及使用方法。
关键信息

  • falsify通过解析样本树进行生成和收缩,与Hypothesis中基于线性流的样本处理不同。
  • 内部收缩可跨monadic bind,解决了QuickCheck中集成收缩的问题。
  • 选择性函子用于控制生成器的独立性,避免不必要的样本树收缩。
  • 提供多种生成器和组合器,如integralboolchoose等,可用于生成不同类型的数据。
  • 可测试收缩行为,通过testShrinkingOfGentestMinimum等函数检查生成器的收缩效果。
  • 提供与QuickCheckhedgehog风格收缩的兼容性组合器。
    重要细节
  • Gen的定义基于无限样本树,每个生成器针对不同子树运行并更新。
  • 在处理无限样本树时,falsify使用偏序关系进行收缩,而Hypothesis使用全序关系。
  • 示例中展示了如何使用falsify进行各种属性测试,如测试乘法结果的奇偶性、生成和测试函数等。
  • 解释了falsify在处理生成器和收缩时的一些注意事项和限制,如避免生成后丢弃值、单次收缩步骤等。
阅读 9
0 条评论