标签: quickcheck

Cabal安装Quickcheck版本问题

我正在尝试在Ubuntu 10.04上通过cabal安装quickcheck 2。无论我尝试做什么,我总是会遇到以下问题:

$ cabal list quickcheck
* QuickCheck
    Synopsis: Automatic testing of Haskell programs
    Latest version available: 2.1.1.1
    Latest version installed: 1.2.0.0
    Homepage: http://www.cse.chalmers.se/~koen
    License:  BSD3
Run Code Online (Sandbox Code Playgroud)

这是在干净的Ubuntu 10.04上,仅安装了ghc6和cabal-install apt软件包。在尝试安装quickcheck之前,我已经通过cabal安装了二进制软件包。

它告诉我2.1.1.1可用,但只能安装1.2.0.0。为什么我无法真正安装最新版本?

haskell quickcheck cabal hackage

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

SIMPLE随机数生成

经过一段令人沮丧的研究后,我正在写这篇文章,我希望这里有人能够启发我这个话题.

我想在haskell函数中生成一个简单的随机数,但是,如果没有各种非平凡的元素,例如Monads,"do"中的asignation,创建生成器等,这似乎是不可能的.

理想情况下,我正在寻找相当于C的"rand()".但经过多次搜索,我很确信没有这样的东西,因为语言是如何设计的.(如果有,请有人赐教).由于这似乎不可行,我想找到一种方法来获取我的特定问题的随机数,以及关于如何获得随机数的一般解释.

prefixGenerator :: (Ord a, Arbitrary a) => Gen ([a],[a])
prefixGenerator = frequency [ 
    (1, return ([],[])),
    (2, do {
            xs1 <- orderedListEj13 ;
            xs2 <- orderedListEj13 ;
            return (xs1,xs2)
       }),
    (2, do {                
            xs2 <- orderedListEj13 ;
            return ((take RANDOMNUMBERHERE xs2),xs2)
       })
    ]
Run Code Online (Sandbox Code Playgroud)

我正试图掌握QuickCheck,但我无法使用随机数字使其变得困难.我试过像这样(通过把一个drawInt 0(长度XS2)替代RANDOMNUMBERHERE),但我卡住与采取需要诠释的事实和方法给我留下了一个IO诠释,这似乎是不可能转变成根据这个.

random haskell quickcheck

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

使用quickCheck

我为foldl编写了一个实现,并想检查它是否有效,我尝试了一些案例,它似乎运行良好,但我想确定.

我读了一下quickCheck并试了一下,但我似乎无法使它工作,这就是代码

foldl'' :: (b -> a -> b) -> b -> [a] -> b

test :: Eq b => (b -> a -> b) -> b -> [a] -> Bool
test f e ls = foldl'' f e ls == foldl f e ls
Run Code Online (Sandbox Code Playgroud)

当我运行quickCheck test它时会抛出以下错误:

No instance for (Show (b0 -> a0 -> b0))
  arising from a use of `quickCheck'
Possible fix:
  add an instance declaration for (Show (b0 -> a0 -> b0))
In the expression: …
Run Code Online (Sandbox Code Playgroud)

haskell fold quickcheck ghci

5
推荐指数
2
解决办法
1569
查看次数

使用QuickCheck测试故意错误情况

我已经看到QuickCheck如何用于测试monadic和非monadic代码,但是如何使用它来测试处理错误的代码,即打印一些消息然后调用exitWith

haskell quickcheck

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

QuickCheck放弃调查递归数据结构(玫瑰树).

给定一个任意树,我可以使用舒伯特编号在该树上构建一个子类型关系:

constructH :: Tree a -> Tree (Type a)
Run Code Online (Sandbox Code Playgroud)

其中Type嵌套原来的标签,并且还提供了执行父/子(或子类型)的检查所需要的数据.使用Schubert编号,两个Int参数就足够了.

data Type a where !Int -> !Int -> a -> Type a
Run Code Online (Sandbox Code Playgroud)

这导致二元谓词

subtypeOf :: Type a -> Type a -> Bool
Run Code Online (Sandbox Code Playgroud)

我现在想用QuickCheck测试这确实做了我想做的事情.但是,以下属性不起作用,因为QuickCheck只是放弃了:

subtypeSanity ? Tree (Type ()) ? Gen Prop
subtypeSanity Node { rootLabel = t, subForest = f } =
  let subtypes = concatMap flatten f
  in (not $ null subtypes) ==> conjoin
     (forAll (elements subtypes) (\x ? x `subtypeOf` t):(map subtypeSanity f))
Run Code Online (Sandbox Code Playgroud)

如果我遗漏了递归调用subtypeSanity,即我传递给列表的尾部 …

recursion haskell quickcheck

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

fscheck生成大小介于min和max之间的字符串

我尝试编写一个FsCheck生成器,生成给定间隔长度的字符串.

我的尝试如下:

let genString minLength maxLength = 
    let isValidLength (s : string) = 
        s.Length >= minLength && s.Length <= maxLength

    Arb.generate
    |> Gen.suchThat isValidLength
    |> Arb.fromGen
Run Code Online (Sandbox Code Playgroud)

......我收到错误:

"System.Exception : No instances of class FsCheck.Arbitrary`1[a] for type System.String with arguments set []"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢!

更新1:

我设法写了这样的生成器:

let genStrings minLength maxLength = 
    gen {
        let! length = Gen.choose (minLength, maxLength)
        let! chars = Gen.arrayOfLength length Arb.generate<char>
        return new String(chars)
    }
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

更新2:我想将此作为一个单独的问题添加,但它与我原来的问题几乎相同.

所以我将上面的代码重构为以下结构,以便重用序列生成器:

let seqOfLength lengthInterval generator =
    gen {
        let! length …
Run Code Online (Sandbox Code Playgroud)

f# quickcheck fscheck

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

Junit-Quickcheck:生成匹配模式的字符串

我正在使用pholser的端口.我必须生成匹配给定模式的字符串\[a-zA-Z0-9\\.\\-\\\\;\\:\\_\\@\\[\\]\\^/\\|\\}\\{]* Length 40.

我将Generator类扩展为:

public class InputGenerator extends Generator<TestData> {...}
Run Code Online (Sandbox Code Playgroud)

它重载了一个函数:

publicTestData generate(SourceOfRandomness random, GenerationStatus status) {...}
Run Code Online (Sandbox Code Playgroud)

现在,random有像nextDouble(),nextInt()这样的函数,但没有字符串!如何生成与上述模式匹配的随机字符串?

java junit quickcheck

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

HTF不测试TH生成的道具

我想在我的库中对各种类型进行一些类似的测试.

为简化起见,假设我有许多实现Num类的向量类型,并且我想生成相同的QuickCheck属性检查prop_absNorm x y = abs x + abs y >= abs (x+y),该检查可以对库中的所有类型起作用.

我使用TH生成这样的属性:

$(writeTests
    (\t ->
        [d| prop_absNorm :: $(t) -> $(t) -> Bool
            prop_absNorm x y = abs x + abs y >= abs (x+y)
        |])
 )
Run Code Online (Sandbox Code Playgroud)

我生成测试的函数具有以下签名:

writeTests :: (TypeQ -> Q [Dec]) -> Q [Dec]
Run Code Online (Sandbox Code Playgroud)

此函数查找我的矢量类的所有实例VectorMath (n::Nat) t(以及同时的实例Num)reify ''VectorMath并相应地生成所有prop函数. -ddump-splices显示这样的事情:

prop_absNormIntX4 :: Vector 4 Int -> Vector 4 Int -> Bool
prop_absNormIntX4 x y = …
Run Code Online (Sandbox Code Playgroud)

haskell quickcheck template-haskell htf

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

如何测试此数据类型的Semigroup定律?

我试图解决与"第一原理的Haskell编程"第15章中的另一个问题相同的练习.我已经创建了一个Semigroup实例,而且我在编写QuickCheck部分练习时遇到了麻烦.

Semigroup实例应该满足:

a <> (b <> c) == (a <> b) <> c
Run Code Online (Sandbox Code Playgroud)

<>Semigroup mappend 在哪里.

我想出了以下内容:

import Data.Semigroup
import Test.QuickCheck

semigroupAssoc :: (Eq m, Semigroup m) => m -> m -> m -> Bool
semigroupAssoc a b c = (a <> (b <> c)) == ((a <> b) <> c)

newtype Combine a b = Combine { unCombine :: (a -> b) }

instance Semigroup b => Semigroup (Combine a b) where
  (Combine f) …
Run Code Online (Sandbox Code Playgroud)

haskell types typeclass quickcheck

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

如何编写quickCheck函数的属性?

我正在尝试在Haskell Book(第15章,"Monoid,Semigroup")中进行Monoid练习之一,但我被卡住了.给出以下内容:

newtype Combine a b =
  Combine { unCombine :: (a -> b) }
Run Code Online (Sandbox Code Playgroud)

我应该Monoid为Combine 编写实例.

我写了这样的东西:

instance (Semigroup b) => Semigroup (Combine a b) where
  Combine { unCombine = f } <> Combine { unCombine = g } =
    Combine { unCombine = \x -> f x <> g x }

instance (Monoid b) => Monoid (Combine a b) where
  mempty = Combine { unCombine = \_ -> mempty }
  mappend = (<>)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何quickCheck为实例编写. …

haskell quickcheck

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

标签 统计

quickcheck ×10

haskell ×8

cabal ×1

f# ×1

fold ×1

fscheck ×1

ghci ×1

hackage ×1

htf ×1

java ×1

junit ×1

random ×1

recursion ×1

template-haskell ×1

typeclass ×1

types ×1