【问题标题】:verboseCheck in QuickCheck 2?QuickCheck 2 中的详细检查?
【发布时间】:2012-05-15 13:33:04
【问题描述】:

QuickCheck 1 中的函数verboseCheck 似乎在 QuickCheck 2 中不存在(或者至少,我找不到它)。有没有其他方法可以显示测试期间使用了哪些值?

【问题讨论】:

    标签: haskell quickcheck


    【解决方案1】:

    sample 函数也很有用:

    Prelude Test.QuickCheck
    ghci> sample (arbitrary :: Gen String)
    ""
    ")\223"
    "(\227\&5F"
    "\DC1"
    "\136'\140\180\FS"
    "K\DC2\NUL\CAN\253Q"
    "\DC4\f\184&.\DC3\159\&1I\160j\147"
    ....
    

    这样,您可以轻松地使用您的任意实例,并确保它们生成您认为它们生成的内容。

    【讨论】:

      【解决方案2】:

      是的,这似乎是 QuickCheck 1 的功能回归。

      但是,您可以通过使用 Debug.Trace.trace 语句注释您的属性来解决此问题。比如:

      import Debug.Trace
      
      prop_eq xs = traceShow xs $ 
         xs == reverse (reverse xs)
      

      【讨论】:

        【解决方案3】:

        我很满意

        import Debug.Trace
        verboseCheck prop = quickCheck (\input -> traceShow input $ prop input)
        

        【讨论】:

          【解决方案4】:

          看起来 verbose(和其他 verbose- 函数)在 2.4 版中返回给 QuickCheck

          【讨论】:

            【解决方案5】:

            我查看了源代码,似乎 Args 已重构,configEvery 不再存在,因此如果不修补 QuichCheck 源代码,您将无法打印所有测试值

            【讨论】: