标签: quickcheck

如何编写一个函数来解决quickCheck prop_xxx?

我正在使用QuickCheck v1.这是一个简单的prop_xxx定义如下:

prop_foo :: (Num a) =>[a] -> Bool
prop_foo xs = (reverse.reverse) xs == id xs
Run Code Online (Sandbox Code Playgroud)

这可以在GHCi中正确测试:quickCheck prop_foo

但是,当我尝试在以下函数中包装调用时:

f :: IO ()
f = quickCheck prop_foo
Run Code Online (Sandbox Code Playgroud)

它报告了错误:

Ambiguous type variable `a' in the constraints:
  `Num a' arising from a use of `prop_foo' at Foo.hs:147:15-22
  `Arbitrary a'
    arising from a use of `quickCheck' at Foo.hs:147:4-22
Probable fix: add a type signature that fixes these type variable(s)
Run Code Online (Sandbox Code Playgroud)

我应该提供类似的东西

instance Arbitrary Xxx where
    arbitrary     = ...
    coarbitrary c = ...
Run Code Online (Sandbox Code Playgroud)

非常感谢. …

haskell quickcheck

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

QuickCheck NonEmpty String - listOf

我正在学习quickcheck(和haskell),我有de bellow代码:

newtype Urls = FN { unFN :: String } deriving Show

instance Arbitrary Urls where
arbitrary = do protocol <- elements ["http://"]
             name <-  listOf $ elements ['a'..'z']
             domain <- elements [".com",".com.br",".net"]
             return (FN (protocol ++ name ++ domain))
Run Code Online (Sandbox Code Playgroud)

我的问题是关于我如何使listOf永远不会返回空(NonEmpty),因为现在对于生成的一些数据我收到像{unFN ="http://.net"}这样的字符串,简化了我希望该名称永远不会为空

haskell quickcheck

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

Haskell任务的Makefile示例

而不是发明我自己的,对于典型的Haskell任务,例如编译,打包,hlint,quickcheck等,有什么好的makefile规则?

在搜索中我发现像这样的例子:

ghc -M *.hs
Run Code Online (Sandbox Code Playgroud)

haskell makefile quickcheck cabal hlint

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

haskell双精度下溢与修复

我写了一些使用repa 计算距离矩阵的代码:

distance :: Int -> Int -> Mat -> Double
distance aindx bindx arr = let a = slice arr (Any :. aindx :. All)
                               b = slice arr (Any :. bindx :. All)-
                               sqdiff = R.map (\x -> x*x) $ R.zipWith (-) a b 
                            in sqrt $ sumAllS sqdiff

buildDistanceMatrix :: Mat -> Mat 
buildDistanceMatrix m = let (Z :. height :. width) = R.extent m
                            cords = fromListUnboxed (Z :. (height * height) )  [ (x,y) …
Run Code Online (Sandbox Code Playgroud)

haskell double-precision quickcheck repa

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

从无限浮点列表中删除零

我想从无限的浮动列表中进行采样,以便进行QuickCheck消费.但是,由于我打算使用除法,我想从该列表中删除.这是一个概念上简单的问题,我想知道我是否可以用列表理解来做,如果没有,哪个是在Haskell中实现这个的最简单方法?

[x | x <- floats, x /= 0] -- this seems reasonable, but where do I get floats from?
Run Code Online (Sandbox Code Playgroud)

我目前的解决方法(哎呀):

import Test.QuickTest

divGen :: Gen (Maybe Float)
divGen = do
    x <- arbitrary
    if x /= 0
    then return $ Just x
    else return Nothing
Run Code Online (Sandbox Code Playgroud)

haskell list-comprehension quickcheck

1
推荐指数
2
解决办法
433
查看次数

QuickChecking简单的Functors:定义一个必要的Arbitrary实例吗?为什么?怎么样?

我正在使用Functors和QuickCheck进行练习.

我有一个超级简单的Functor,其组成法我想快速检查.Functor简直就是一个Identity a.这是我到目前为止的代码:

import Data.Functor
import Test.QuickCheck

newtype Identity a = Identity a

instance (Eq a) => Eq (Identity a) where
    (==) (Identity x) (Identity y) = x == y
    (/=) (Identity x) (Identity y) = x /= y

instance Functor Identity where
    fmap f (Identity x) = Identity (f x)

propertyFunctorCompose ::(Eq (f c), Functor f) => (a -> b) -> (b -> c) -> f a -> Bool
propertyFunctorCompose f g fr = (fmap (g . …
Run Code Online (Sandbox Code Playgroud)

haskell functor quickcheck

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

在Windows上找不到模块“ Test.QuickCheck”

我的ghci版本是8.4.3

我试过了

stack install QuickCheck
Run Code Online (Sandbox Code Playgroud)

已安装某些东西。但是当我输入时import Test.QuickCheck,它会Could not find module ‘Test.QuickCheck’再次显示。我该如何解决?

haskell quickcheck

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

如何快速检查Enum和Bounded类型的所有可能情况?

我有一个quickCheck属性,它涉及为只有两个元素的和类型生成元素.

显然,对于这种情况,默认的测试用例数量100太多,因此我习惯withMaxSuccess将案例数量减少到3.这样运行得很快但由于两个原因并不理想.首先,运行的三个测试用例超过了所需的两个测试用例.其次,这三个案例并不全面,因为四分之一的机会都是三个相同的因素,而另一个则排除在外.

我已经尝试过QuickCheck的forAll修饰符,看起来它可能正在寻找我想要的东西,但运行的测试用例数仍然是100.

如果我有一个具有有限数量元素的类型作为QuickCheck测试的生成器,有没有办法设置QuickCheck通过每个元素运行一次来​​全面测试该属性?

要限定类型是否具有有限数量的元素,也许它可以由类EnumBounded类型限定.

haskell quickcheck

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

多个任意调用返回相同的值

我希望下面的代码生成一个大小为1,2或3的列表生成器,每个元素都是独立生成的.

shortlist :: Arbitrary a => Gen [a]
shortlist = oneof $ map promote [[arbitrary],  
                                 [arbitrary, arbitrary], 
                                 [arbitrary, arbitrary, arbitrary]]
Run Code Online (Sandbox Code Playgroud)

REPL:

sample (shortlist :: Gen [Char])
"\255\255\255"
"ii"
"FF"
"\236\236"
"FF"
"'''"
"8"
"HH"
"\160"
"\DEL\DEL\DEL"
"\246\246" 
Run Code Online (Sandbox Code Playgroud)

每个列表包含相同char的1,2或3个实例.为什么武断不按预期行事?

haskell quickcheck

0
推荐指数
2
解决办法
84
查看次数

"[(),()]"Haskell中的数组

最近,我一直在使用Haskell和QuickCheck进行自动测试.有些时候我有一些失败,但程序检索[(),()]为检查参数.

什么"[(),()]"意思?

automated-tests haskell quickcheck

0
推荐指数
1
解决办法
124
查看次数