gpt4 book ai didi

haskell - Haskell 中的单元测试 IO Int 和类似的

转载 作者:行者123 更新时间:2023-12-04 12:04:10 25 4
gpt4 key购买 nike

来自 Ninety-Nine Haskell Problems :

Question 23 :从列表中提取给定数量的随机选择的元素。

这是部分解决方案。为简单起见,此代码仅从列表中选择一个元素。

import System.Random (randomRIO)

randItem :: [a] -> IO a
randItem xs = do
i <- randomRIO (0,length xs - 1)
return $ xs !! i

所以 randItem [1..10]将返回 IO Int对应于(但不等于)从 1 到 10 的某个 Int。

到目前为止,一切都很好。但是我可以为我的 randItem 函数编写什么样的测试呢?我可以确认输入和输出之间的关系(如果有的话)?

我可以使用与上述函数相同的逻辑来生成 m Bool ,但我不知道如何测试 m Bool .谢谢你。

最佳答案

你可以做几件事。如果您使用的是 QuickCheck,则可以编写以下属性:

  • 返回列表的长度应等于输入长度。
  • 返回列表中的所有元素都应该是候选列表的元素。

  • 除此之外,Haskell 随机库的美妙之处在于(与大多数其他 Haskell 代码一样)它是确定性的。如果,而不是将您的实现基于 randomRIO , 你可以基于 randomRrandomRs .这将使您能够通过一些已知的 RandomGen某些确定性单元测试用例(不是 QuickCheck)的值。这些可以作为回归测试。

    我现在发表了 an article about the above approach , 完整的 source code .

    关于haskell - Haskell 中的单元测试 IO Int 和类似的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791466/

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