2016-09-06 61 views
1

說,我的數據類型:快速檢查從靜態排列組合列表生成

data A = A1 | A2 | A3 
data B = B1 A | B2 A 

我可以很容易地生成的我想測試所有可能的排列B的所有可能性的列表,但我仍然想使用QuickCheck來將它應用的列表中的所有元素吐出。在這種情況下,我想測試一個規則適用於所有可能性,所以我不想生成隨機數據。

假設我已經有了列表中的所有可能性,怎樣才能讓QuickCheck輸出列表中的每個元素?每次給出相同的確切值。

+2

如果您可以自己輕鬆生成所有排列,爲什麼不在單元測試中完全不調用QuickCheck呢?如果您生成自己的案例,QuickCheck不會爲您做任何事情。 –

+0

我所有的測試都使用QuickCheck。我認爲所有數據都來自QuickCheck,而不是在特殊情況下做一些笨重的事情會更好。如果QuickCheck可以逐個將該列表提供給該檢查,那麼我認爲這更清潔。 – kurzweil4

回答

1

想必你有這樣的:

prop_for_b :: B -> Bool 
prop_for_b = undefined 

test_for_b :: IO() 
test_for_b = quickCheck prop_for_b 

您可以使用quickCheck及其在普通Bool小號變種,它會巧妙地只運行一個「測試」;因此:

prop_for_all_bs :: Bool 
prop_for_all_bs = all prop_for_b [{- ... -}] 

test_for_all_bs :: IO() 
test_for_all_bs = quickCheck prop_for_all_bs 
+0

根本不符合我的想法。完全不同的東西,但正是我所期待的。這是一個更簡單的方法。 – kurzweil4