2016-09-06 62 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