我们有两个函数比较两个不同的power函数,如果它们返回相同的值(在相同的输入上),则返回true。
然后我们有另外两个函数根据两个列表测试这些函数,看看是否有任何值没有返回true。
但是,我们希望使用QuickCheck,而不是使用使用范围[1..100]的列表。
有没有可能让QuickCheck只返回正整数?
代码:
comparePower1 :: Integer -> Integer -> Bool
comparePower1 n k = power n k == power1 n k
comparePower2 :: Integer -> Integer -&g
我创建了自己的myzipWith函数,并希望将其与使用quickCheck的原始zipWith进行比较。
myzipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
myzipWith a y [] = []
myzipWith a [] y = []
myzipWith a (x:xs) (z:zs) = [a x z] ++ myzipWith a xs zs
prop_zip x y z = myzipWith x y z == zipWith x y z
当我通过键入quickCheck prop_zip运行qui
根据的建议,
以及的一些解决方案,
我一直无法使这段代码可行:
instance Semigroup a
=> Semigroup (ZipList a) where
(<>) = liftA2 (<>)
instance Monoid a
=> Monoid (ZipList a) where
mempty = pure mempty
mappend = liftA2 mappend
mconcat as =
foldr mappend mempty as
mconcatP :: NonEmptyL
鉴于以下情况:
test :: (Int -> Int) -> Int -> Bool
test _ _ = True
编译源代码后,我尝试运行quickCheck test
> quickCheck test
<interactive>:27:1:
No instance for (Show (Int -> Int))
arising from a use of ‘quickCheck’
In the expression: quickCheck test
In an equation for ‘it’: it =
我有以下Haskell函数:
expM :: Integer -> Integer -> Integer -> Integer
expM x y = rem (x^y)
和
exMME :: Integer -> Integer -> Integer -> Integer
exMME b 0 m = 1
exMME b e m = exMME' b e m 1 0 where
exMME' b e m c e'
| e' < e = exMME'
我对Haskell很陌生,我正试图为Sudoku中的任意单元生成一个随机加权数
90% of the time, it should generate Nothing
10% of the time, it should generate a random value between 1 and 9
这就是我到目前为止想出的(它还没有编译)
-- cell generates an arbitrary cell in a Sudoku
-- cell :: Gen (Maybe Int)
cell = case x of 1 -> return (Just y); _ -> r
我希望在一个函数中使用quickcheck来测试Maclaurin系列是否等于1/x,用于x>1和x<2。但是,对于n的小值,quickcheck返回假测试。此外,如果我设置了n>100限制,例如,quickcheck返回:
“放弃了!只通过了0次考试。”
这是我的密码:
prop_inv :: Float -> Int -> Property
prop_inv x n = (x>1 && x<2) && n>100 ==> inv x n == 1/x
(inv x n是计算Maclaurin级数的
我为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
当我运行quickCheck test时,它抛
我在我的文件顶部导入QuickCheck:
import Test.QuickCheck
...
使用ghc Lab1.hs编译该文件会给出以下错误:
Lab1.hs:1:8:
Could not find module `Test.QuickCheck'
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
我尝试过对quickcheck进行适当的缓存搜索,得到了一个可怕的包列表。尝试安装libghc-test-framework-dev仅仅是因为我认为这个名称看起来
请考虑以下几点:
import Test.QuickCheck
import Test.QuickCheck.Checkers
import Test.QuickCheck.Classes
data List a = Nil | Cons a (List a) deriving (Eq, Show)
instance Functor List where
fmap _ Nil = Nil
fmap f (Cons a l) = Cons (f a) (fmap f l)
instance Eq a => EqProp (List a) where (=-=) = e
我正试图实现一件非常简单的事情。我有这样的数据类型:
import Test.QuickCheck
import System.Random
data Letter = G | B deriving(Show, Eq, Bounded)
arbitraryLetter :: Gen Letter
arbitraryLetter = choose (G,B)
我正在编译并得到这个错误。
• No instance for (Random Letter) arising from a use of ‘choose’
• In the expression: choose (G,
下面是和来自Data.List.Split的的类型签名
chunksOf :: Int -> [e] -> [[e]]
splitPlaces :: Integral a => [a] -> [e] -> [[e]]
为什么有些函数(如chunksOf)使用Int,而另一些函数(如splitPlaces)使用更通用的Integral a
我在运行堆栈/GHCi版本8.4.3的macOS上:
在GHCi提示符下和在我的.hs文件中,import Test.QuickCheck都会失败。不管怎样,我被告知它没有被找到。GHCi Prelude>
<no location info>: error:
Could not find module ‘Test.QuickCheck’
It is not a module in the current program, or in any known package.
在.hs文件中>
"Could not find module ‘Test
我正在和Servant一起构建一个API,它似乎工作得很好。为了符合最佳实践,我正在为它编写一些测试,遵循官方指南。但是我正在使用Servant-Quickcheck来处理这个部分。
我试着用它来测试我的API没有给出任何500个错误,如下所示:
quickCheckSpec :: Spec
quickCheckSpec = describe "QuickCheck global tests for public API -" $ do
it "API never gives 500 error" $
withServantServer public
我正在尝试安装HTF。然而,在我cabal install HTF之后,我得到了这样的结果:
Resolving dependencies...
Configuring HTF-0.10.0.7...
Warning: This package indirectly depends on multiple versions of the same
package. This is highly likely to cause a compile failure.
package regex-base-0.93.2 requires mtl-2.0.1.0
package aeson-0.6.0
我正在尝试解决与第15章中的相同的练习。我已经创建了一个Semigroup实例,并且在编写练习的QuickCheck部分时遇到了问题。
半群实例应满足:
a <> (b <> c) == (a <> b) <> c
其中<>是半组映射。
我想出了以下几点:
import Data.Semigroup
import Test.QuickCheck
semigroupAssoc :: (Eq m, Semigroup m) => m -> m -> m -> Bool
semigroupAssoc a b c =
不过,我正在尝试使用QuickCheck库安装这个库,尽管安装是成功的,但是程序没有运行。我用了命令:
cabal install QuickCheck
安装完毕。我将其导入haskell文件,如下所示:
import Test.QuickCheck
但是,我得到的错误是没有找到QuickCheck模块:
error:
Could not find module `Test.QuickCheck'
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
1 | import T
我面临着为生成器编写一个收缩函数的问题,它依赖于另一个生成器输出的值。基本上是形式的生成器:
do
a <- genA
b <- f a
pure $! g a b
其中genA :: Gen a,f :: a -> Gen b g :: a -> b -> c.为了便于论证,假设是g = (,)。然后问题是,给定一对(a, b),收缩a会破坏a、f和b之间的关系。
要提供这方面的示例,请考虑以下具有缓存长度的列表:
data List =
List
{ llength :: Int
, list :: [Int]
} deriving
安装了QuickCheck,
我再次安装cabal install QuickCheck-1.2.0.0
并再次加载,但出现错误
找不到模块Test.QuickCheck.Batch': It is a member of the hidden package快速检查-1.2.0.0‘。
它是隐藏包,怎么办?
ghc -o tryprog hello.hs -package QuickCheck-1.2.0.0 :无法满足-package QuickCheck-1.2.0.0 (使用-v了解更多信息)
除了这个错误,如何使用包quickcheck-1.2.0.0加载.hs文件?
这道题