限制測試資料的大小

使用快速檢查來測試具有較差漸近複雜度的函式可能是困難的,因為隨機輸入通常不是大小有界的。通過在輸入的大小上新增上限,我們仍然可以測試這些昂貴的函式。

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 的列表。我們的排列函式不會這些短名單需要花費太長時間,但我們仍然可以合理地確信我們的定義是正確的。