标签: quickcheck

为什么Haskell给出"模糊类型变量"错误?

过去的纸质问题问我; 定义一个函数p :: [a] - > [a],它交换列表中的每两个项目.您的函数应该将第一个项与第二个项交换,第三个与第四个项交换,依此类推.通过递归来定义列表理解中的另一个.

这就是我提出的:

import Test.QuickCheck
p :: [a] -> [a]
p [] = []
p xs = concat [ [y,x] | ((x,y),i) <- zip (zip xs (tail xs)) [1..], odd i]
q :: [a] -> [a]
q [] = []
q (x:y:zs) | even (length zs) = [y,x] ++ q zs
           | otherwise = error "The list provided is not of even length"
prop_2 xs = even (length xs) ==> p xs == q xs …
Run Code Online (Sandbox Code Playgroud)

recursion haskell function list quickcheck

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

使用QuickCheck生成存在类型?

我正在努力解决这个问题 - QuickCheck如何为所有类型生成一个值?也许它可以伪造它,并且只测试具有上下文的类型Arbitrary a => a

我只是想知道有人如何为存在类型的数据构造函数创建一个任意的实例:

data Foo a = Foo a (forall b. (a -> b, b -> a))
Run Code Online (Sandbox Code Playgroud)

haskell existential-type quickcheck

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

clojure.test.check生成两个整数,一个比另一个小

我想写一个如下属性:

(prop/for-all [x (gen/nat)
               y (gen/nat)]
  (= (g x y) (f x y)))
Run Code Online (Sandbox Code Playgroud)

但是,该物业仅在何时持有x > y.表达此属性的前提条件的正确方法是什么?(更好的是,我怎么能写出这个属性,这个属性y生成的自然数小于x?)

clojure quickcheck property-based-testing

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

使用quickCheck生成levenshtein距离实现的测试用例

作为我学习的一部分,我quickCheck想为levenshtein编辑距离实现构建一个测试生成器.我认为显而易见的方法是从两个相等的字符串和一个随机的非可还原系列的插入/删除/ traspose操作开始,将其应用于其中一个字符串并断言levenshtein距离是随机序列的长度.

我很坚持这可以有人帮忙吗?

haskell quickcheck

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

为使用Maybe的newtype创建任意实例

我想Arbitrary为以下newtype 创建一个实例,以便将其用于QuickCheck:

newtype Wrapmaybe a = Wrapmaybe {getMaybe :: Maybe a} deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

我知道Arbitrary实例Maybe可以写成如下:

instance Arbitrary a => Arbitrary (Maybe a) where
     arbitrary = frequency [(1, return Nothing), (1, liftM Just arbitrary)]
Run Code Online (Sandbox Code Playgroud)

如何Arbitrary在不出现类型错误或类型错误的情况下为以下内容编写实例:

instance Arbitrary a => Arbitrary (Wrapmaybe Maybe a) where
   etc...
Run Code Online (Sandbox Code Playgroud)

haskell quickcheck

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

如何在Haskell Test.QuickCheck中有效地生成随机测试

我想使用Haskell Test.QuickCheck生成一些示例测试

目标是使用以下条件生成(Int,[Int])的数据,其中元组是(x,xs):

  1. x> 0
  2. x不在xs中
  3. 所有xs> 0

经过一段时间后,我可以抓住我的脑袋并绊倒手册https://github.com/stackbuilders/quickcheck-manual,我可以生成符合这些要求的随机列表:

import Test.QuickCheck
mygen = arbitrary::Gen (Int, [Int]))
sample (mygen `suchThat` ( \(x, xs)->( (x `notElem` xs) && (x > 0) && (all (>0) xs)&& (xs/=[]))))
Run Code Online (Sandbox Code Playgroud)

在GHCI中运行最后一行输出如下:

(40,[19,35,27,29,45,1,17,28])
(20,[3,9,11,12,15,8])
(43,[76,102,106,71,24,2,29,101,59,48])
(99,[5,87,136,131,22,22,133])
(77,[11,14,55,47,78,15,14])
...
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 如何才能更有效地完成这项工作,因为 - 我猜测 - mygen创建一个大样本集的函数然后根据suchThat标准过滤掉

  2. 如何指示列表xs应该具有一定的大小.例如,如果我添加&& length xs > 50程序运行很长一段时间.

  3. 保证xs的每个元素都是唯一的.即避免像(99,[22,22])这样的记录

testing random haskell quickcheck

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

如何在Go包之间共享测试接口?

Go 不会在不同包的测试文件之间共享代码,因此测试接口的定义不会自动重用。在实践中我们如何解决这个问题?

使用示例testing/quick

foo/foo.go

package foo

type Thing int

const (
  X Thing = iota
  Y
  Z
)
Run Code Online (Sandbox Code Playgroud)

bar/bar.go

package bar

import (
  "foo"
)

type Box struct {
  Thing foo.Thing
}
Run Code Online (Sandbox Code Playgroud)

我们想要测试属性foo,所以我们testing/quick.Generate定义Thing

foo_test.go

package foo

import (
  "math/rand"
  "reflect"
  "testing"
  "testing/quick"
  "time"
)

func (_ Thing) Generate(r *rand.Rand, sz int) reflect.Value {
  return reflect.ValueOf(Thing(r.Intn(3)))
}

func TestGenThing(t *testing.T) {
  r := rand.New(rand.NewSource(time.Now().UTC().UnixNano()))
  for i := 0; i < …
Run Code Online (Sandbox Code Playgroud)

testing go quickcheck property-testing

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

如何在Hspec测试中使用QuickCheck?

我为我的Haskell项目构建了初始代码库,我cabal init 用Hspec编写了几个测试.在cabal test它上编译和运行这些测试,如预期,并给出失败/传递的消息.

现在我加入了一个quickCheck测试,即使测试失败,终端输出也无法识别quickCheck测试.

但在dist/test/dir中我可以看到测试日志 *** Failed! ...

有没有办法在测试工作流程中"包含"quickCheck测试.因此,我不必在每次测试运行后查看测试日志.

import Test.Hspec
import Test.QuickCheck

spec :: Spec
spec = do
    describe "myTest" $ do
        it "Something something" $ do
            myTest "" `shouldBe` False
            quickCheckWith stdArgs { maxSuccess = 1000 } prop_myTest -- <== ?
Run Code Online (Sandbox Code Playgroud)

tdd haskell quickcheck cabal property-testing

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

如何使用 QuickCheck 选择一个范围内的值?

我有以下代码用于在以下网站上创建挑战:codewars

describe "Random cases" $ do
    it "It should handle random test cases" $ 
        property $ prop_check where 
            prop_check  (Positive x) = solution x == ref_sol x
            --- ref_sol function
Run Code Online (Sandbox Code Playgroud)

我想将xprop_check 中的值设置为大于 4 的正整数,并且最多为五位数字(不超过五位数字,即:最大值 = 99999)。

我该如何接近它呢?

haskell quickcheck hspec

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

使用频率选择 Haskell QuickCheck

所以我有下面的代码,我试图将其作为一个实例Arbitrary

\n
data MyData = I Int | B Bool\n\ninstance Arbitrary MyData where\n  arbitrary = do {\n     frequency [(1, return (I 1)),\n                (1, return (choose((B True), (B False))))]\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

然而,我得到了(可以理解的)错误:

\n
Couldn't match type \xe2\x80\x98Gen MyData\xe2\x80\x99 with \xe2\x80\x98MyData\xe2\x80\x99\n      Expected type: Gen MyData\n        Actual type: Gen (Gen MyData)\n
Run Code Online (Sandbox Code Playgroud)\n

我怎样才能实现这一目标?另外,I 1我想返回I一个随机的而不是 () Int。然而,使用该arbitrary函数而不是1会导致相同的错误。

\n

haskell quickcheck

3
推荐指数
2
解决办法
268
查看次数