gpt4 book ai didi

haskell - 如何限制 QuickCheck 参数,例如只使用非负整数?

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

我是 Haskell 新手。到目前为止,这非常好,但我遇到了 QuickCheck 属性的复制粘贴问题,我想解决这个问题。

这是一个虚构的示例:

prop_Myfunc :: [Int] -> (Int,Int) -> Bool
prop_Myfunc ints (i,j) = ints !! i == ints !! j

这不起作用,因为 QuickCheck 会生成负数,所以我得到

*** Failed! (after 2 tests and 2 shrinks):                               
Exception:
Prelude.(!!): negative index

我尝试在谷歌上寻找解决方案,并且发现了例如NonNegative和==>,但我不明白它们是如何工作的。

如何限制上面的示例,使 i 和 j 永远不会为负数?而且,这样两者都不会太高?即:0 <= i,j < length ints

最佳答案

首先,参见this SO answer有关如何编写自定义 Gen ... 函数以及如何使用 forAll 组合器的示例。

以下是如何为非空列表编写生成器并将两个有效的非负索引写入列表:

import Test.QuickCheck

genArgs :: Gen ( [Int], Int, Int )
genArgs = do
x <- arbitrary
xs <- arbitrary
let n = length xs
i <- choose (0,n)
j <- choose (0,n)
return ( (x:xs), i, j) -- return a non-empty list

test = quickCheck $ forAll genArgs $ \(xs,i,j) -> prop_myfunc xs (i,j)

关于haskell - 如何限制 QuickCheck 参数,例如只使用非负整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27171979/

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