代码之家  ›  专栏  ›  技术社区  ›  mherzl

如何快速检查枚举和有界类型的所有可能情况?

  •  0
  • mherzl  · 技术社区  · 6 年前

    我有一个 quickCheck 属性,该属性涉及为只有两个元素的和类型生成元素。

    显然,默认的测试用例数量100对于这个用例来说太多了,所以我使用了 withMaxSuccess 将病例数量减少到3例。这运行速度很快,但并不理想,原因有二。首先,运行的三个测试用例超过了所需的两个。其次,这三个案例并不全面,因为这三个案例中有四分之一的可能性都涉及相同的因素,而排除了另一个因素。

    我试过快速检查 forAll 修饰符,它似乎可以实现我想要的功能,但运行的测试用例数量仍然是100。

    如果我有一个具有有限个元素的类型作为QuickCheck测试的生成器,有没有一种方法可以设置QuickCheck,通过对每个元素运行一次来对该类型的属性进行全面测试?

    要限定类型是否具有有限数量的元素,可能可以由 Enum Bounded 类型类。

    0 回复  |  直到 6 年前
        1
  •  5
  •   Daniel Wagner    6 年前

    不使用快速检查怎么样?

    > myNeatProperty x = (x == GT) || (x <= EQ)
    > all myNeatProperty [minBound .. maxBound]
    True
    > lessNeatProperty x = x <= EQ
    > all lessNeatProperty [minBound .. maxBound]
    False
    > -- Oh no! Can we have some counterexamples, please?
    > filter (not . lessNeatProperty) [minBound .. maxBound]
    [GT]
    

    对于那些你的空间有限但没有空间的情况 Enum Bounded 考虑使用 universeF 代替 [minBound .. maxBound] .