如何快速检查Enum和Bounded类型的所有可能情况?

时间:2019-02-19 02:30:12

标签: haskell quickcheck

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

显然,对于这种情况,默认的测试用例数量100太多了,因此我使用withMaxSuccess将测试用例的数量减少到3。这运行很快,但是由于两个原因并不理想。首先,运行的三个测试用例比所需的两个要多。其次,这三个案例并不全面,原因是三分之四的可能性是所有三个要素都包含相同的要素,而另一要素则被排除在外。

我尝试了QuickCheck的forAll修饰符,它似乎可以满足我的要求,但是运行的测试用例数量仍然是100。

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

要限定类型是否具有有限数量的元素,也许可以同时使用EnumBounded类型类对其进行限定。

1 个答案:

答案 0 :(得分:5)

不使用快速检查怎么样?

> 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]

对于您的空间有限但EnumBounded有限的情况,请考虑使用universeF代替[minBound .. maxBound]