gpt4 book ai didi

haskell - 快速检查自定义数据类型

转载 作者:行者123 更新时间:2023-12-02 18:21:38 24 4
gpt4 key购买 nike

我成功地对此进行了快速检查:

testaroo = quickCheck $ checkWin

checkWin :: [(Int, ThePlayers)] -> Bool
checkWin [(1,_),(2,_),(3,_)] = True
checkWin [(4,_),(5,_),(6,_)] = True
checkWin [(7,_),(8,_),(9,_)] = True
checkWin [(1,_),(5,_),(9,_)] = True
checkWin [(3,_),(5,_),(7,_)] = True
checkWin [(1,_),(4,_),(7,_)] = True
checkWin [(2,_),(5,_),(8,_)] = True
checkWin [(3,_),(6,_),(9,_)] = True
checkWin _ = False

但是当我尝试运行

testaroo = quickCheck $ removeFromList

removeFromList :: (Int, ThePlayers) -> [(Int, ThePlayers)] -> [(Int, ThePlayers)]
removeFromList tuple list = delete tuple list

我遇到以下情况:

No instance for (Arbitrary ThePlayers)
arising from a use of `quickCheck'
Possible fix:
add an instance declaration for (Arbitrary ThePlayers)
In the expression: quickCheck
In the expression: quickCheck $ removeFromList
In an equation for `testaroo':
testaroo = quickCheck $ removeFromList
Failed, modules loaded: none.

我添加了在 checkWin 上成功运行 QuickCheck 的操作

instance Arbitrary BoardState
where
arbitrary = arbitrary

但说实话,我不太确定这是做什么的:)。无论如何,我可以在我的 removeFromList 函数上运行测试吗?

最佳答案

QuickCheck 必须生成随机案例来测试您的属性(property),方法是

No instance for (Arbitrary ThePlayers)

它基本上表示它不知道如何为测试生成随机 ThePlayers 值,您应该实现一个实例 Arbitrary ThePlayers

<小时/>

此外,quickCheck 的类型是

quickCheck :: Testable prop => prop -> IO () 

即使模块可以为您生成随机参数,函数 removeFromList 看起来也不像 Testable (属性),也不像 checkWin code>:函数的属性是关于:它的正确结果应该是什么?结果应该满足什么?论点和结果之间有什么关系? QuickCheck 模块不会也无法从您的函数生成属性,您必须自己指定它。

(顺便说一句,您对 checkWin 的第一个测试之所以被编译,只是因为它偶然有一个返回类型 Bool,它没有指示您程序的任何属性,并且会失败几乎每次)

例如,Data.List 中的 reverse 函数的一个属性是:reverse 函数不应更改列表,因此基于此事实的检查应该是:

prop_length :: [Int] -> Bool
prop_length as = length as == length (reverse as)

然后您可以基于它构建测试:

test_propLength = quickCheck prop_length
<小时/>

您可以尝试some tutorials了解更多信息。

关于haskell - 快速检查自定义数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com