如何快速检查既是枚举类型又是有界类型的所有可能情况?
How to quickCheck all possible cases for a type that is both Enum and Bounded?
我有一个 quickCheck 属性,它涉及为只有两个元素的求和类型生成元素。
显然默认的测试用例数 100 对这个案例来说太多了,所以我使用 withMaxSuccess
将案例数减少到 3 个。这 运行s 很快但由于两个原因并不理想。首先,三个测试用例 运行 比所需的两个多。其次,这三个案例并不全面,因为有四分之一的几率所有三个案例都涉及相同的元素,而排除另一个。
我已经尝试过 QuickCheck 的 forAll
修饰符,它似乎可以满足我的要求,但是测试用例的数量 运行 仍然是 100。
如果我有一个元素数量有限的类型作为 QuickCheck 测试的生成器,有没有办法设置 QuickCheck 以通过 运行 全面测试 属性将它与每个元素结合一次?
要限定类型是否具有有限数量的元素,也许它可以由 Enum
和 Bounded
类型类来限定。
不使用快速检查怎么样?
> 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]
对于 space 有限但 Enum
和 Bounded
有限的情况,请考虑使用 universeF
代替 [minBound .. maxBound]
。
我有一个 quickCheck 属性,它涉及为只有两个元素的求和类型生成元素。
显然默认的测试用例数 100 对这个案例来说太多了,所以我使用 withMaxSuccess
将案例数减少到 3 个。这 运行s 很快但由于两个原因并不理想。首先,三个测试用例 运行 比所需的两个多。其次,这三个案例并不全面,因为有四分之一的几率所有三个案例都涉及相同的元素,而排除另一个。
我已经尝试过 QuickCheck 的 forAll
修饰符,它似乎可以满足我的要求,但是测试用例的数量 运行 仍然是 100。
如果我有一个元素数量有限的类型作为 QuickCheck 测试的生成器,有没有办法设置 QuickCheck 以通过 运行 全面测试 属性将它与每个元素结合一次?
要限定类型是否具有有限数量的元素,也许它可以由 Enum
和 Bounded
类型类来限定。
不使用快速检查怎么样?
> 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]
对于 space 有限但 Enum
和 Bounded
有限的情况,请考虑使用 universeF
代替 [minBound .. maxBound]
。