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

问题描述 投票:1回答:1

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

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

我已经尝试过QuickCheck的forAll修饰符,看起来它可能正在寻找我想要的,但运行的测试用例数仍然是100。

如果我有一个具有有限数量元素的类型作为QuickCheck测试的生成器,有没有办法设置QuickCheck通过每个元素运行一次来​​全面测试该属性?

要确定该类型是否具有有限数量的元素,也许它可以由EnumBounded类型类别限定。

haskell quickcheck
1个回答
5
投票

不使用quickcheck怎么样?

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

© www.soinside.com 2019 - 2024. All rights reserved.