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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何快速检查Enum和Bounded类型的所有可能情况?相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

答案

不使用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]

以上是关于如何快速检查Enum和Bounded类型的所有可能情况?的主要内容,如果未能解决你的问题,请参考以下文章

枚举类型enum

用于检查排列的 Haskell 函数

检查 Enum 中是不是存在字符串

如何在 Symfony 2 / Doctrine 中启用 ENUM

mysql中使用enum,如何获取所有可能的值

TypeScript: switch enum