Fel*_*sén 8 testing haskell quickcheck
我们有两个比较两个不同power函数的函数,如果它们返回相同的值(在同一个输入上),则返回true.
然后我们有两个其他函数来测试这些函数对两个列表,看看是否有任何值不返回true.
但是[1..100]我们不想使用使用范围的列表,而是使用QuickCheck.
是否可以使QuickCheck仅返回正整数?
码:
comparePower1 :: Integer -> Integer -> Bool
comparePower1 n k = power n k == power1 n k
comparePower2 :: Integer -> Integer -> Bool
comparePower2 n k = power n k == power2 n k
testing1 = and [comparePower1 n k | n <- [0..100], k <- [0..100]]
testing2 = and [comparePower2 n k | n <- [0..100], k <- [0..100]]
Run Code Online (Sandbox Code Playgroud)
mar*_*iop 11
QuickCheck支持正数,但为了本教程,我将向您展示如何创建自己的Generator.QuickCheck的主要功能之一是您可以设计自己的发生器来输出您需要的产品.例如
genPos :: Gen Int
genPos = abs `fmap` (arbitrary :: Gen Int) `suchThat` (> 0)
Run Code Online (Sandbox Code Playgroud)
然后,您可以创建自己的列表生成器
genListOfPos :: Gen [Int]
genListOfPos = listOf genPos
Run Code Online (Sandbox Code Playgroud)
最后你可以使用forAll,传递发电机和利润.
main :: IO ()
main = do
quickCheck $ forAll genPos $ \x -> x > 0
quickCheck $ forAll genListOfPos $ all (> 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |