限制测试数据的大小

使用快速检查来测试具有较差渐近复杂度的函数可能是困难的,因为随机输入通常不是大小有界的。通过在输入的大小上添加上限,我们仍然可以测试这些昂贵的函数。

import Data.List(permutations)
import Test.QuickCheck

longRunningFunction :: [a] -> Int
longRunningFunction xs = length (permutations xs)

factorial::Integral a => a -> a
factorial n = product [1..n]

prop_numberOfPermutations xs =
    longRunningFunction xs == factorial (length xs)

ghci> quickCheckWith (stdArgs { maxSize = 10}) prop_numberOfPermutations

通过将 quickCheckWithstdArgs 的修改版本一起使用,我们可以将输入的大小限制为最多 10.在这种情况下,当我们生成列表时,这意味着我们生成最大为 10 的列表。我们的排列函数不会这些短名单需要花费太长时间,但我们仍然可以合理地确信我们的定义是正确的。