我看著maxSize在Args。它的描述是:“用于最大測驗用例的大小”。但是測驗用例的大小是如何確定的呢?我寧愿問而不是通過源代碼:
myArgs :: Args
myArgs = Args{replay=Nothing
,maxSuccess=1000
,maxDiscardRatio=1
,maxSize=1
,chatty=False
,maxShrinks=0}
例如,如果我有一個任意的 typeGen String
和另一個 type Gen [String],那么maxSize=1這是否意味著生成的字串的長度為 1 而生成的 String 串列的長度為 1?
uj5u.com熱心網友回復:
如果我沒記錯的話,每個Arbitrary實體都可以自由尊重或使用size有意義的引數。舉例來說,size并沒有多大意義的Arbitrary為Bool。
嘗試自己嘗試。對于串列,它肯定具有您假設的效果:
Prelude Test.QuickCheck> propList = const True :: [Int] -> Bool
Prelude Test.QuickCheck> verboseCheckWith (Test.QuickCheck.stdArgs { maxSize = 2 }) propList
Passed:
[]
Passed:
[1]
Passed:
[]
Passed:
[0]
Passed:
[]
Passed:
[1]
(我已經編輯了輸出以闡明這一點,因為實際輸出正如函式名稱所暗示的那樣,是冗長的。)
uj5u.com熱心網友回復:
根據過時的手冊,它意味著串列的長度(注意這String也是一個串列)。該檔案似乎沒有在任何地方為特定實體指定它。
sized手冊中提到的函式中的大小因子是使用以下注釋計算的:
-- 例如 maxSuccess = 250, maxSize = 100, 是這樣的: -- 0, 1, 2, ..., 99, 0, 1, 2, ..., 99, 0, 2, 4, ... ., 98.
此外,查看代碼,它通過將整數值從 -size 限制到 size 來限制它們。
uj5u.com熱心網友回復:
size 引數的含義有些隨意。該手冊說:
不同的測驗資料生成器以不同的方式解釋 size 引數:有些會忽略它,而串列生成器則將其解釋為生成串列長度的上限。您可以隨意使用它來控制自己的測驗資料生成器。
它基本上是框架傳遞給arbitrary動作的整數,它從 0 開始并逐漸增長。這允許測驗用例開始更簡單并逐漸變得更復雜。例如,這是串列和字串的長度,或整數的絕對大小。提供了幾個組合器來操縱尺寸引數。
提供的maxSize配置選項允許您在測驗數量與單個測驗復雜性之間進行權衡。如果您指定大量測驗,您是希望資料的復雜性不斷增加(可能導致大幅放緩)還是只想在達到某個復雜性閾值后測驗大量案例?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/394432.html
