【问题标题】:Make Test.QuickCheck.Batch use a default type for testing list functions使 Test.QuickCheck.Batch 使用默认类型来测试列表函数
【发布时间】:2010-09-09 00:23:33
【问题描述】:

我正在测试一个名为 extracts 的函数,它可以对任何列表进行操作。

extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
    where extract [] _ = []
          extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)

我想测试一下,例如

import Test.QuickCheck.Batch    
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]

但这不会编译;我必须为runprop_len 提供一个类型,因为QuickCheck 不能生成[a],它必须生成一些具体的东西。所以我选择了Int

main = runTests "extractions" defOpt [r prop_len]
    where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult

有什么方法可以让 QuickCheck 为我选择 a,而不是在 run 的类型中指定它?

【问题讨论】:

    标签: testing haskell type-inference quickcheck


    【解决方案1】:

    quickcheck manual 说“不”:

    属性必须具有单态类型。 “多态”属性,例如上面的属性,必须限制在特定类型才能用于测试。这样做很方便,方法是在 a 中声明一个或多个参数的类型

    其中类型 = (x1 :: t1, x2 :: t2, ...)

    条款...

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2012-03-02
      • 1970-01-01
      相关资源
      最近更新 更多