使用SmallCheck测试高阶函数遇到的两个问题
SmallCheck高阶函数测试问题解答
问题1:测试用例为何通过?
当SmallCheck的深度设置为1时,生成的IntMorph(即Int -> Int)函数都是常量函数——无论输入什么整数,函数都会返回同一个固定值。此时f 3和f 30的结果完全一致,因此map f [1,2,3]的结果[f 1, f 2, f 3]自然等于[f 1, f 2, f 30],测试用例也就通过了。
问题2:深度改为2后执行cabal test冻结的原因
SmallCheck基于“深度”生成不同复杂度的测试用例。深度为2时,生成的函数不再是简单的常量函数,而是会区分不同的输入值(比如针对小整数输入返回不同结果,对其余输入返回固定值)。由于Int类型的取值范围极大,深度2下需要枚举的可能函数数量会呈指数级爆炸增长,导致测试程序消耗大量计算资源和时间,最终出现冻结无响应的情况。
内容的提问来源于stack exchange,提问作者RandomB
相关产品推荐
相关产品推荐

