Haskell QuickCheck中的穷举属性?

Haskell QuickCheck中的穷举属性?,haskell,quickcheck,Haskell,Quickcheck,考虑Haskell中的以下快速检查程序 {-# LANGUAGE TemplateHaskell #-} import Test.QuickCheck import Test.QuickCheck.All prop_trivial :: Bool prop_trivial = 42 == (6 * 7) -- Wacky boilerplate to make all tests run. return [] runTests = $quickCheckAll main = do run

考虑Haskell中的以下快速检查程序

{-# LANGUAGE TemplateHaskell #-}
import Test.QuickCheck
import Test.QuickCheck.All

prop_trivial :: Bool
prop_trivial = 42 == (6 * 7)

-- Wacky boilerplate to make all tests run.
return []
runTests = $quickCheckAll
main = do
  runTests
这适用于ghc版本7.8.3和QuickCheck 2.7.6。问题是它会重复测试100次。我四处寻找缓解措施,并在中找到
详尽的
。太棒了!我将我的
道具更改为以下内容:

prop_trivial = exhaustive $ property $ 42 == (6 * 7)
哪种类型检查和编译,但失败:

=== prop_trivial from /blahblahblah/FooTest.hs:6 ===
*** Failed! Falsifiable (after 1 test): 
False

我对如何理解和调试这个结果有点困惑;这些文件太薄了,我弄不清楚到底发生了什么。

这真是直截了当。
穷举
的默认定义用于
属性
实例,默认定义为
穷举u=False
。我想你可能想要
详尽的$42==(6*7)

这是非常简单的。
穷举
的默认定义用于
属性
实例,默认定义为
穷举u=False
。我认为您可能需要
详尽的$42==(6*7)

似乎可以使用
一次
修改属性,使其仅运行一次

一些示例代码:

{-# LANGUAGE TemplateHaskell #-}
import Test.QuickCheck
import Test.QuickCheck.All

prop_trivial :: Int -> Bool
prop_trivial x = x == x
prop_trivial2 = once prop_trivial
prop_true = True
prop_true2 = once True

-- Wacky boilerplate to make all tests run.
return []
runTests = $quickCheckAll
main = do
  putStrLn $ "exhaustive prop_trivial  = " ++ show (exhaustive prop_trivial)
  putStrLn $ "exhaustive prop_trivial2 = " ++ show (exhaustive prop_trivial2)
  putStrLn $ "exhaustive prop_true     = " ++ show (exhaustive prop_true)
  putStrLn $ "exhaustive prop_true2    = " ++ show (exhaustive prop_true2)
  runTests
输出:

exhaustive prop_trivial  = False
exhaustive prop_trivial2 = False
exhaustive prop_true     = True
exhaustive prop_true2    = False
=== prop_trivial from qc2.hs:5 ===
+++ OK, passed 100 tests.

=== prop_trivial2 from qc2.hs:7 ===
+++ OK, passed 1 tests.

=== prop_true from qc2.hs:8 ===
+++ OK, passed 100 tests.

=== prop_true2 from qc2.hs:9 ===
+++ OK, passed 1 tests.

穷举
prop仅在已知prop的测试是穷举的情况下返回True-请注意
穷举True
穷举$once True
之间的区别。似乎可以使用
once
将属性修改为仅运行一次

一些示例代码:

{-# LANGUAGE TemplateHaskell #-}
import Test.QuickCheck
import Test.QuickCheck.All

prop_trivial :: Int -> Bool
prop_trivial x = x == x
prop_trivial2 = once prop_trivial
prop_true = True
prop_true2 = once True

-- Wacky boilerplate to make all tests run.
return []
runTests = $quickCheckAll
main = do
  putStrLn $ "exhaustive prop_trivial  = " ++ show (exhaustive prop_trivial)
  putStrLn $ "exhaustive prop_trivial2 = " ++ show (exhaustive prop_trivial2)
  putStrLn $ "exhaustive prop_true     = " ++ show (exhaustive prop_true)
  putStrLn $ "exhaustive prop_true2    = " ++ show (exhaustive prop_true2)
  runTests
输出:

exhaustive prop_trivial  = False
exhaustive prop_trivial2 = False
exhaustive prop_true     = True
exhaustive prop_true2    = False
=== prop_trivial from qc2.hs:5 ===
+++ OK, passed 100 tests.

=== prop_trivial2 from qc2.hs:7 ===
+++ OK, passed 1 tests.

=== prop_true from qc2.hs:8 ===
+++ OK, passed 100 tests.

=== prop_true2 from qc2.hs:9 ===
+++ OK, passed 1 tests.
穷举
prop仅在已知prop测试是穷举的情况下返回True-请注意
穷举True
穷举$once True
之间的区别。它不像QuickCheck那样开发,但是对于详尽的测试来说非常好。当QuickCheck生成随机输入时,smallcheck系统地生成其输入,在给定(由您)大小的所有输入上运行您的属性。对于具有有限多居民的类型,这使得设置穷举测试变得非常简单,而且因为我们不试图生成随机的内容,这也使得避免重复测试变得很容易。以下是一个简单的ghci示例:

Test.SmallCheck> smallCheck 10 (6*7 == 42)
Completed 1 tests without failure.
10
是用于选择何时停止生成输入的最大深度;因为没有输入,所以在本例中忽略它。对于使用尺寸的示例,请考虑:

Test.SmallCheck> smallCheck 10 (\x -> x <= (10 :: Integer))
Completed 21 tests without failure.
Test.SmallCheck> smallCheck 20 (\x -> x <= (10 :: Integer))
Failed test no. 22.
there exists 11 such that
  condition is false
Test.SmallCheck>SmallCheck 10(\x->x SmallCheck 20(\x->x你可能会喜欢。它不像QuickCheck那样发达,但非常适合进行详尽的测试。在QuickCheck生成随机输入的地方,SmallCheck系统地生成输入,在给定(由你)的所有输入上运行你的属性大小。对于具有有限多居民的类型,这使得设置穷举测试变得非常简单,而且因为我们不尝试生成随机内容,这也使得避免重复测试变得很容易。下面是一个简单的ghci示例:

Test.SmallCheck> smallCheck 10 (6*7 == 42)
Completed 1 tests without failure.
10
是用于选择何时停止生成输入的最大深度;由于没有输入,因此在本例中忽略它。对于使用大小的示例,请考虑:

Test.SmallCheck> smallCheck 10 (\x -> x <= (10 :: Integer))
Completed 21 tests without failure.
Test.SmallCheck> smallCheck 20 (\x -> x <= (10 :: Integer))
Failed test no. 22.
there exists 11 such that
  condition is false

Test.SmallCheck>SmallCheck 10(\x->x SmallCheck 20(\x->x遗憾的是,使用
穷举$42==(6*7)
,测试仍然运行了100次。我试图获得一个
属性Bool
实例来进行穷举,但显然没有成功。遗憾的是,使用
穷举$42==(6*7)
,该测试仍然运行了100次。我试图获取一个
属性Bool
实例来进行穷举,但显然没有成功。