我有一个quickCheck属性,其中涉及为只有两个元素的求和类型生成元素。
显然,对于这种情况,默认的测试用例数量100太多了,因此我使用withMaxSuccess
将测试用例的数量减少到3。这运行很快,但是由于两个原因并不理想。首先,运行的三个测试用例比所需的两个要多。其次,这三个案例并不全面,原因是三分之四的可能性是所有三个要素都包含相同的要素,而另一要素则被排除在外。
我尝试了QuickCheck的forAll
修饰符,它似乎可以满足我的要求,但是运行的测试用例数量仍然是100。
如果我有一个元素数量有限的类型可以作为QuickCheck测试的生成器,是否可以通过对每个元素运行一次属性来设置QuickCheck以对该类型的属性进行全面测试?
要限定类型是否具有有限数量的元素,也许可以同时使用Enum
和Bounded
类型类对其进行限定。
答案 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]
对于您的空间有限但Enum
和Bounded
有限的情况,请考虑使用universeF
代替[minBound .. maxBound]
。