24得票1回答
在Haskell(GHC)中快速检查一个令人讨厌的外部函数

我想使用Haskell的quickcheck库测试一些C代码。最简单的方法似乎是使用foreign import来编写一个与C函数有关的属性。问题在于,如果C代码导致段错误或管理垃圾内存,我的测试要么没有输出而崩溃,要么做出完全不可预测的事情。 第二种选择是在C位上制作简单的可执行包装程序,...

23得票2回答
Haskell QuickCheck - 如何生成仅包含可打印字符的字符串

我有一组编码/解码字符串的简单演示程序,并希望为它们生成一些quickCheck测试,但要将测试限制为仅包含可打印的字符串。使用保护条件太慢并且由于生成和拒绝的测试用例过多而失败,因此我想为此域创建一个安全的生成器。 所引用的内容要么是(1)定义自己的Char Arbitrary实例并使用它...

22得票1回答
QuickCheck Gen不是一个单子。

我偶尔会看到有人说QuickCheck中的Gen类型不遵守单子定律,但我没有看到太多解释。现在,QuickCheck 2.7的Test.QuickCheck.Gen.Unsafe模块说Gen只是“道德上”符合单子定律,但简短的解释让我感到困惑。你能否给出一个逐步说明Gen如何违反单子定律的例子?

21得票1回答
如何将单元测试与Haskell的Cabal集成的当前状态是什么?

当我在Google上搜索如何使用Cabal文件集成单元测试时,我要么找到: http://www.haskell.org/haskellwiki/How_to_write_a_Haskell_program ,但这似乎并没有描述如何将HUnit / QuickCheck与Cabal文件集成...

19得票2回答
QuickCheck实例应该放在Cabal包的哪里?

我有一个cabal包,其中导出了一个类型NBT,可能对其他开发人员有用。我已经费力定义了我的类型的Arbitrary实例,如果不为其他开发人员提供测试其集成我的工作代码的机会,那将是一件遗憾的事情。 然而,我想避免我的实例可能会妨碍其他开发人员的情况。也许其他开发人员对Arbitrary实例...

19得票1回答
Test.QuickCheck.Monadic: 为什么在Bool上应用assert,而不是Testable a => a?

在使用QuickCheck测试单子代码(Claessen,Hughes 2002)中,assert的类型为: assert :: (Monad m, Testable a) => a -> PropertyM m () 然而,在Test.QuickCheck.Monadic中...

18得票1回答
QuickCheck中如何控制测试数据的生成

我写了一个在Haskell中解决子集和问题的算法。签名是: subsetSum :: (Ord a, Num a) => [a] -> a -> Maybe [a] 快速检查似乎是测试这个的好选择。例如,以下是我可以检查的属性之一: prop_sumEqualsS l...

17得票1回答
如何覆盖由包代码提供的Haskell类型类实例?

我有一些旧的Haskell代码,其中包括QuickCheck测试用例。较新版本的QuickCheck(我刚升级到2.4.0.1)包括Arbitrary Word8等类型类实例。这些在旧版本的Test.QuickCheck.Arbitrary中的2.0.x版本中不存在。 尽管通常很有用,但包提...

16得票2回答
用于什么的属性测试?

我想知道性质测试的目的是什么,它的优点是什么,应该在哪里使用。让我们来看一个要测试的示例函数:f :: [Integer] -> [Integer] 这个函数 f 接受一个数字列表,将平方其中的奇数并过滤掉偶数。我可以说明一些关于该函数的属性,例如: 给定一个偶数列表,返回空列表...

16得票3回答
如何告诉QuickCheck仅为参数生成有效的列表索引?

假设我想为(!!)函数编写一些单元测试。my_prop xs n = ... 我想将n限制在有效索引范围内,我知道我可以像这样做:my_prop xs n = (not.null) (drop n xs) ==> ... 但这会导致大部分生成的案例无效并被丢弃,有没有办法让QuickCh...