如何显示理由有一个快速检查测试失败财产?

什么是当它通过快速检查测试失败的性能测试显示的原因,最好的做法?

例如,考虑:

prop ab = res /= [] where (res, reason) = checkCode ab

然后,一个会话可能看起来像:

> quickCheck prop Falsifiable, after 48 tests: 42 23

但对于调试这将是非常方便的,以示对失败的原因为快速检查falsifable报告的一部分。

我已经砍死它是这样的:

prop ab = if res /= [] then traceShow reason False else True where (res, reason) = checkCode ab

是否有更好的/更好以上quickcheckish办法做到这一点?

--------------解决方案-------------

我假设你的“理性”变量包含某种在什么地方出了错具体测试数据。 你可以改为返回一个“结果”,其中包含成功/失败/无效的条件和字符串,解释什么地方出了错。 返回结果性质通过快速检查以完全相同的方式返回布尔属性处理。

(编辑)所示:

module QtTest where

import Test.QuickCheck
import Test.QuickCheck.Property as P

-- Always return success
prop_one :: Integer -> P.Result
prop_one _ = MkResult (Just True) True "always succeeds" False [] []

-- Always return failure
prop_two :: Integer -> P.Result
prop_two n = MkResult (Just False) True ("always fails: n = " ++ show n) False [] []

需要注意的是它是在Test.QuickCheck.P​​roperty定义所需的“结果”类型。

也有Test.QuickCheck.P​​roperty定义了一些组合程序,帮助您撰写的结果,而不是直接调用构造函数,如

prop_three :: Integer -> Property
prop_three n = printTestCase ("always fails: n = " ++ show n) False

我想这将是更好的风格来使用它们。

因为快速检查提供了输入端的功能,而且由于被测代码是纯粹的(它是吧?),你可以只给那些函数的输入并得到结果。 这是更灵活,因为这些投入还可以反复测试调整到原来的功能,直到它是正确的。

分类:哈斯克尔 时间:2012-01-01 人气:0
本文关键词: 哈斯克尔,快速检查
分享到:

相关文章

  • 哈斯克尔快速检查的最佳做法(尤其是测试型的类时) 2012-10-18

    我刚开始使用的QuickCheck和一帮Haskell代码. 我落伍了,我知道了. 这个问题是一个两舞伴: 首先,什么是快速检查一般的最佳做法? 到目前为止,我已经拿起了以下几点: 命名您的测试prop_ *(烦人,因为一切是驼峰) 测试代码出口(如果你正在测试的内部你可能做错了) 测试性能,而不是一个例子 不要说X is out of range, Y is in range 相反,说if x is out of range, normalize x ≠ x (或其他类似的属性) 但我仍然在等

  • 如何获得哈斯克尔快速检查2.4增加#测试? 2013-05-13

    好吧,当我通过我刚才的问题上了解到,RWH书已经过时了快速检查的. 尽管所有的职位我读过,告诉我它是多么的简单使用快速检查,我找不到,告诉我如何改变测试的数目为属性运行任何地方. RWH说: handyCheck limit = check defaultConfig { configMaxTest = limit , configEvery = \_ _ -> "" } 如何使用快速检查2.4做到这一点? 更重要的是,我将如何发现了自己? 请不要告诉我,我应该已经能够从API文

  • 哈斯克尔快速检查属性埃文斯一半 2014-02-02

    我有一个程序,它接受一个列表,每个减半偶数列表中 halfEvens :: [Int] -> [Int] halfEvens xs = [if x `mod` 2 == 0 then x `div` 2 else x | x <- xs] 我想写一个快速检查属性用于此功能,这验证如果初始和编纂名录相等,当且仅当在该列表中没有偶数 prop_evens xs = ((halfEvens xs == xs) && (length (filter (even) xs) == 0))

  • 哈斯克尔快速检查独特的随机数生成 2014-10-26

    有谁知道如何利用这种快速检查所选择的元素只有一次拿起Haskell中定义一个发电机? 据意识到我可能需要一个"根(也许正)"发生器我已经得到了,但当然,这将产生与重复次数. 我想它,以便选择的数字是没有重复采摘. 在当返回一个号码,我只想回来,在实例,其中偶合都用尽比如我想没有代返回. 谢谢, 标记 --------------解决方案------------- 你不能. 看看定义Gen . 有没有办法为它进行什么迄今已采摘的状态. 给予相同的随机数发生器和大小限制它必须总是产生相同的

  • 如何使用哈斯克尔来检查列表包含一个元组的值 2013-04-27

    我写了一些函数在Haskell图,我想检查是否整数列表,如 [1,4, 5, 7] 包含顶点,使边,这是我作为代表一个元组,像这样 (1,5) 我试着去走一个函数,列表和元组,在这种情况下将返回true,因为列表包含1和5,我遇到的主要问题是,即时通讯真的不知道如何在搜索列表哈斯克尔. 是他们的一个类型[A]和类型的值的列表,并返回一个布尔值,取决于[A]是否包含一个函数? --------------解决方案------------- 有检查一个值是否在列表的功能, elem :: Eq a

  • 哈斯克尔类型检查 2014-03-14

    我试图做一些自我学习与哈斯克尔. 函数loadData读取一些数据从文件,并基于一个整型参数做一些关于它的处理,产生的映射. 我需要创建两个这样的地图和应用余弦相似度量它.我正在试图先找到两张地图的交集. 但是,我碰到一个类型的错误( Couldn't match expected type `a0 -> Map.Map k0 a1' with actual type `IO (Map.Map [Char] Double)' )我怎么能输出饲料loadData到Map.intersection

  • 在哈斯克尔快速随机产生不错的选择 2015-01-10

    我有一个用例,我想测试程序对一些赌博游戏. 我需要的随机数应该是在一个很小的区域(1至9),而且也没有必要realquality. 我发现,这哈斯克尔标准产生速度太慢,我,所以任何人都蒙山更好的想法? --------------解决方案------------- 梅森随机-pure64包是非常快的,因为是MWC随机的. 我发现了关于Xorshift随机根,这完全符合我的需要. 我要去实现它在Haskell,并把实行网上. 它的完成:Xorshift上传到hackage,和我需要一些改进.

  • 哈斯克尔:检查两个列表相等 2013-05-06

    我要检查,如果两个列表A和B相等,即a1 == b1, a2 == b2 ,... 我有一个工作的解决方案: all (\x->x) zipWith $ (==) AB 另一个想法是做递归: a:as, b:bs ; 检查,如果a1==b1和调用函数与剩余的名单as和bs . 但是,是不是有一个更简单,更可读的方式做到这一点? --------------解决方案------------- 你可以使用==他们直接. > [1, 2, 3] == [1, 2, 3] True > [1,

  • 哈斯克尔:检查整数,或检查变量的类型 2012-10-17

    因此,可以说你有一个变量n. 你要检查它的整数,甚至更好,但检查它是什么类型. 我知道有在Haskell的函数,ISDIGIT来检查,如果它是一个char ......但是有一个函数,如果n为整数,甚至更好,给出n的类型检查? 谢谢 --------------解决方案------------- 如果您在使用交互式Haskell的提示(如ghci中),您可以键入:t <expression>并且会给你一个表达式的类型. 例如 Prelude> :t 9 给 9 :: (Num t) =&

  • 学习习惯哈斯克尔(ETA减少,象征性的缀运营商,图书馆等)的资源 2014-10-29

    尽管与Lisp和ML一些经验,我有麻烦学习阅读和(地道)写哈斯克尔因为当地的风格似乎是一个很大的 做ETA消除只要有可能 避开括号赞成利用运算符优先级 收拾一半的逻辑变成超载,非字母数字缀运营商开始酸痛 最后一个是特别困难的,因为有这么多的预定义的运营商,每个都有自己的惯例和通用语义,经常阅读哈斯克尔成为Hoogle和运动:type . 是否有承担的CS /功能性概念知识,任何好的教程,而是侧重于具体的哈斯克尔,成语? 我正在寻找类似真实世界哈斯克尔,是一个非常幼稚的,明确的程序开头,然后逐渐变

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.969 (s). 10 q(s)