标签: quickcheck

是否有与QuickCheck一起使用的Monadic版本的Arbitrary?

当我想测试纯代码时,QuickCheck我经常要写一个Arbitrary实例.要测试monadic代码,我可以Test.QuickCheck.Monadic按照本文所述使用.

我的问题是:是否有一些规范的方法来生成依赖于monadic上下文的数据?特别是,有任何monadic版本的任意?您将如何生成需要monadic上下文的数据?

testing monads haskell functional-programming quickcheck

9
推荐指数
2
解决办法
380
查看次数

类型类挑战:具有可变参数和结果

在编写一些Arbitrary实例时,我使用以下非常机械的模式实现了几个函数:

type A = Arbitrary -- to cut down on the size of the annotations below
shrink1 :: (A a          ) => (a           -> r) -> (a           -> [r])
shrink2 :: (A a, A b     ) => (a -> b      -> r) -> (a -> b      -> [r])
shrink3 :: (A a, A b, A c) => (a -> b -> c -> r) -> (a -> b -> c -> [r])

shrink1 f a     = [f a' …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass quickcheck

9
推荐指数
1
解决办法
310
查看次数

QuickCheck for Javascript

是否有适用于Javascript的quickcheck版本,并且维护得很好?我找到了几个如check.js和claire,但它们似乎都没有支持缩小失败的测试用例,这一直是我整个问题中最有用的部分.

javascript quickcheck node.js

9
推荐指数
2
解决办法
1824
查看次数

QuickCheck推广功能的一般情况是什么?

具有类似QuickCheck promote功能的结构的仿函数的一般术语是什么,即形式的函数:

promote :: (a -> f b) -> f (a -> b)
Run Code Online (Sandbox Code Playgroud)

(这是反过来的flip $ fmap (flip ($)) :: f (a -> b) -> (a -> f b)).除了(->) r和之外,是否还有任何具有此类操作的仿函数Id?(我相信一定有).谷歌搜索'quickcheck promote'只显示了QuickCheck文档,该文档没有提供promote任何更一般的上下文AFAICS; 搜索"快速检查促销"的SO不会产生任何结果.

haskell functional-programming functor quickcheck category-theory

9
推荐指数
2
解决办法
271
查看次数

自动收集所有quickChecks

作为quickCheck的粉丝,我有很多

prop_something_something = ...
Run Code Online (Sandbox Code Playgroud)

贯穿我的计划.

为方便起见,我定义了轻松运行所有这些内容

runchecks = do
    quickCheck prop_something_something
    quickCheck prop_something_different
Run Code Online (Sandbox Code Playgroud)

但是有一种很好的生成方式runchecks吗?

TL; DR:我想在文件中轻松运行所有quickChecks.我想有一种方法是使用test_或类似的东西为runnable测试添加前缀,但这可能太过于hacky.

haskell quickcheck

8
推荐指数
2
解决办法
518
查看次数

如何在Quickcheck中使用修饰符(在我的情况下为正)

我有一个函数,rev它为三个类型类中的类型返回一些值:

rev :: (Integral a, Show a, Read a) => a -> a
rev = read . reverse . show
Run Code Online (Sandbox Code Playgroud)

我想通过quickcheck测试一些关于它的属性.虽然,我对测试Integral类型的负值不感兴趣,因为我在基础库中Integer缺少Natural类型.所以我想,让我们采取与生成的值为负时生成的值相反的方法,我会没事的:

prop_id :: (Integral a, Show a, Read a) => Positive a -> Bool
prop_id n | n >= 0    = (rev.rev) n == n
          | otherwise = let n' = -n in (rev.rev) n' == n'
Run Code Online (Sandbox Code Playgroud)

(测试的属性在这里并不重要 - 特别是它不适用于非常基本的值,我知道这一点,它不是这个问题的主题)

然后我遇到了Positive修改器,并认为虽然我的测试现在正在运行,但以更好的方式实现它会很好.所以我尝试过:

prop_id :: (Integral a, Show a, Read a) => Positive a …
Run Code Online (Sandbox Code Playgroud)

haskell quickcheck

8
推荐指数
1
解决办法
1432
查看次数

quickCheckAll总是返回"True"

我正在尝试使用另一个答案的 QuickCheck .我这样测试:

{-# LANGUAGE TemplateHaskell #-}
import Test.QuickCheck
import Test.QuickCheck.All


last' :: [a] -> a
last' [x] = x
last' (_:xs) = last' xs

prop_test x = last' x == last x

check = do
        putStrLn "quickCheck"
        quickCheck (prop_test :: [Char]-> Bool)

check2 = do
        putStrLn "quickCheckAll"
        $quickCheckAll
Run Code Online (Sandbox Code Playgroud)

然后,我加载它在winGHCI并调用checkcheck2.我明白了

quickCheck
*** Failed! (after 1 test): 
Exception:
  list.hs:(7,1)-(8,23): Non-exhaustive patterns in function last'
""
Run Code Online (Sandbox Code Playgroud)

我认为这是合理的.但是,我从中得到了这个check2

quickCheckAll
True
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为无论我如何改变last'功能,甚至错误,quickCheckAll总是返回True.

我的代码出了什么问题?我怎样才能解决这个问题?

haskell unit-testing quickcheck

8
推荐指数
1
解决办法
426
查看次数

我有哪个套餐版本?

人们应该认为这是一个FAQ,但我无法找到这个简单问题的答案:

我的GHC安装中有哪个版本的某个软件包?

背景

我正在努力学习Haskell,为了做到这一点,我正在通过Real World Haskell.我现在已经达到了第11章,其中包括其他主题,介绍了QuickCheck.

遗憾的是,自2009年该书出版以来,QuickCheck已发生变化,似乎已经进行了各种修改.每当我寻找新的做事方式时,作为书中说明的替代方案,新的方式有时也无效.也许2012年描述了"新方式",但随后QuickCheck在当时和现在之间再次发生了变化.

最后,我将不得不弄清楚如何从文档或源代码中使用QuickCheck,但知道我应该调查哪个版本会非常有帮助.

我还没有达到我了解Cabal等的地步,所以我的问题是基于纯粹的无知.希望有一个简单的答案.

我在Windows上使用GHC,显然,QuickCheck已经捆绑到我的安装中.我已经有了QuickCheck,但我不知道哪个版本.

haskell ghc quickcheck

8
推荐指数
2
解决办法
331
查看次数

并行运行QuickCheck属性

在我的项目中,我有几个QuickCheck属性,其中大部分是我使用forAllProperties收集的,在Test.QuickCheck.All中定义.我试图并行运行我的所有属性,这很麻烦:在运行结束时,我得到了在终端中打印的输出,并且反例和属性名称经常被分散,以致难以将属性与其计数器匹配例子.

我看到库pqc的目的是并行运行属性,但它不提供forAllProperties的替代,也没有提供将forAllProperties与并行测试驱动程序组合的方法.

感觉就像我需要的是forAllProperties将属性名称传递给它作为参数获取的函数.

我还研究了在线程基础上重定向stdout,首先使用system-posix-redirect(这不是线程安全的),然后研究Test.QuickCheck.State,尤其是终端字段.后者没有成功,因为我没有找到重写终端字段的方法.

有没有办法让我以某种方式输出反例和属性名称,而无需复制/粘贴Test.QuickCheck.All模块并进行我需要的更改?

parallel-processing multithreading haskell quickcheck

8
推荐指数
0
解决办法
242
查看次数

仅使用QuickCheck生成正整数

我们有两个比较两个不同power函数的函数,如果它们返回相同的值(在同一个输入上),则返回true.

然后我们有两个其他函数来测试这些函数对两个列表,看看是否有任何值不返回true.

但是[1..100]我们不想使用使用范围的列表,而是使用QuickCheck.

是否可以使QuickCheck仅返回正整数?

码:

comparePower1 :: Integer -> Integer -> Bool
comparePower1 n k = power n k == power1 n k

comparePower2 :: Integer -> Integer -> Bool
comparePower2 n k = power n k == power2 n k

testing1 = and [comparePower1 n k | n <- [0..100], k <- [0..100]]
testing2 = and [comparePower2 n k | n <- [0..100], k <- [0..100]]
Run Code Online (Sandbox Code Playgroud)

testing haskell quickcheck

8
推荐指数
1
解决办法
2152
查看次数