标签: quickcheck

使用Arbitrary实例生成三元组(Network.HTTP.ResponseCode)

我有一个从Network.HTTP获取ResponseCode的函数.为了使用QuickCheck进行测试,我想为ResponseCode编写一个Arbitrary实例.(如果您不知道,ResponseCode只是该库中的三个整数:类型ResponseCode =(Int,Int,Int)).

所以我写了这样的东西:

instance Arbitrary ResponseCode where
    arbitrary = triple ( elements [1..6] )
       where triple f = (f, f, f)
Run Code Online (Sandbox Code Playgroud)

首先,GHC抱怨我使用类型的方式不是标准的haskell所以我必须使用一些编译器标志(这不是我想要的,因为我觉得必须有一个简单的解决方案来解决这个简单的问题标志).

其次,我的任意函数都有错误的类型,这很明显.但后来我真的不知道如何编写一个函数,返回一个三元组,随机的Ints从1-6开始.

如果有人能帮助我,我将不胜感激.

谢谢.

haskell quickcheck

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

创建一个"类型"的任意内容

我有以下,

type Pos = (Int, Int) 
Run Code Online (Sandbox Code Playgroud)

我想生成这种类型的随机值,但有一些限制(两者都必须是0-8)

我想做点什么

instance Arbitrary Pos where
  arbitrary = do x <- choose(0,8) 
                 y <- choose(0,8)
                 return (x,y) 
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中使用它来获得有效的职位.

这不会起作用bc我是别名(?)元组

我试过的其他方法是在我的测试中使用含义来说

prop_my_prop (x,y) = abs x < 9  && abs y < 9 ==> ...
Run Code Online (Sandbox Code Playgroud)

但我认为这很丑陋,理论上它可能会耗尽快速检查(运行超过1000次).

这是一项任务,所以我只想要一些指示来看待或如何处理这个,我不允许改变Pos.

testing haskell functional-programming functional-testing quickcheck

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

快速检查,使用函数定义任意实例,其结果取决于其参数

我有一个函数arbExample来生成一个随机Example数据类型,它取决于许多函数.

我试图通过做一些属性测试quickCheck prop_example,问题是我不知道如何定义一个Arbitrary实例Example使用arbExample.

我喜欢quickCheck prop_example在指定使用的Gens数据结构时运行arbExample.

data Example = Example
    { myInt  :: Int 
    , myList :: [String]
    } deriving (Show)

data Gens =  Gens
    { gen1 :: Gen Int
    , gen2 :: Gen String }

arbExample :: Gens -> Gen Example
arbExample gens = do 
    i  <- gen1 gens 
    xs <- vectorOf i (gen2 gens)
    return Example{myInt=i, myList=xs}

prop_example :: Example -> …
Run Code Online (Sandbox Code Playgroud)

testing haskell generator quickcheck

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

在haskell中使用lambda的函数应用程序?

有这个代码来测试:

-- | this function checks if string or list are a palindrome
    isPalindrome :: (Eq a) => [a] -> Bool
    isPalindrome x =
        if reverse x == x
            then True
            else False
Run Code Online (Sandbox Code Playgroud)

我设法写了这个:

-- | how do I remove ugly parentheses our of here?
palindromeTest verb = isPalindrome ((\verb -> verb ++ reverse verb) verb )  == True
    where types = verb::String
Run Code Online (Sandbox Code Playgroud)

括号看起来很恶心,我该如何解决?

lambda haskell quickcheck

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