当前位置:  开发笔记 > 编程语言 > 正文

使Test.QuickCheck.Batch使用默认类型来测试列表函数

如何解决《使Test.QuickCheck.Batch使用默认类型来测试列表函数》经验,为你挑选了1个好方法。

我正在测试一个名为extractions的函数,它可以在任何列表上运行.

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]

但这不会编译; 我必须为run或提供一个类型prop_len,因为QuickCheck无法生成[a],它必须生成具体的东西.所以我选择了Int:

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

有没有办法让QuickCheck a为我选择而不是在类型中指定run



1> ordnungswidr..:

在快速检查手册说"不":

属性必须具有单形类型."多态"属性(例如上面的属性)必须限制为用于测试的特定类型.通过在a中声明一个或多个参数的类型来方便

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

条款...

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有