【问题标题】:Using quickCheck使用快速检查
【发布时间】:2013-04-24 20:40:04
【问题描述】:

我为 foldl 编写了一个实现并想检查它是否有效,我尝试了一些案例,它似乎运行良好,但我想确定一下。

我阅读了有关 quickCheck 并尝试了它,但我似乎无法让它工作,这是代码

foldl'' :: (b -> a -> b) -> b -> [a] -> b

test :: Eq b => (b -> a -> b) -> b -> [a] -> Bool
test f e ls = foldl'' f e ls == foldl f e ls

当我运行quickCheck test 时,它会抛出以下错误:

No instance for (Show (b0 -> a0 -> b0))
  arising from a use of `quickCheck'
Possible fix:
  add an instance declaration for (Show (b0 -> a0 -> b0))
In the expression: quickCheck prueba
In an equation for `it': it = quickCheck prueba

【问题讨论】:

    标签: haskell ghci fold quickcheck


    【解决方案1】:

    您的属性需要三个输入:一个函数、一个元素和一个列表。问题是 QuickCheck 通常不知道如何处理函数。

    QuickCheck 需要工作的一件事是能够将失败的测试用例写入控制台。为此,它需要可以转换为String--Show 类中的任何值的值。由于函数不在Show 中,因此不能将它们用于输入。这就是您的错误消息的来源。

    一般来说,使用随机生成的函数进行测试会非常棘手。我只是写了一些具体的函数,让 QuickCheck 随机生成起始值和元素列表。

    【讨论】:

      【解决方案2】:

      有一种方法可以避免使用Blind 修饰符对输入的Show 约束,这将允许您使用QuickCheck 的机制来生成随机函数。

      -- Using Int instead of a, b which would be defaulted to () in GHCi
      prueba :: Blind (Int -> Int -> Int) -> Int -> [Int] -> Bool
      prueba (Blind f) e ls = foldl'' f e ls == foldl f e ls
      

      也就是说,这意味着失败输出对于调试几乎没有用,因为它只会打印(*) 用于盲输入。 (为了演示,我定义了foldl'' = foldr . flip

      > quickCheck prueba 
      *** Failed! Falsifiable (after 4 tests and 2 shrinks):    
      (*)
      0
      [1,0]
      

      【讨论】:

      • 不在范围内:类型构造函数或类 `Blind'
      • @chamini2:你导入Test.QuickCheck了吗?
      • 是的,可能是因为我在 OS X 上?ghci --version: The Glorious Glasgow Haskell Compilation System, version 7.4.2
      • @chamini2:您使用的是哪个版本的 QuickCheck?
      • 我不知道如何检查
      【解决方案3】:

      据我了解,QuickCheck 中有用于创建随机函数的机制(请参阅Test.QuickCheck.Function),但我不能说我对这些东西了解得足以告诉你如何使用它。

      话虽如此,使用您自己选择的函数来测试您的属性可能更有意义,因此您可以编写类似quickCheck $ prueba (+) 的内容,这样可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-11
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多