QuickCheck从静态排列列表生成

时间:2016-09-06 21:01:28

标签: haskell quickcheck

假设我有数据类型:

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

我可以轻松生成B的所有可能性的列表。我想测试所有可能的排列,但我仍然想使用QuickCheck来吐出应用它的列表中的所有元素。在这种情况下,我想测试一个规则适用于所有可能性,因此我不想生成随机数据。

假设我已经在列表中拥有所有可能性,我怎样才能使QuickCheck输出列表中的每个元素一次?每次都给出相同的精确值集。

1 个答案:

答案 0 :(得分:1)

据推测,你有类似的东西:

prop_for_b :: B -> Bool
prop_for_b = undefined

test_for_b :: IO ()
test_for_b = quickCheck prop_for_b

您可以在普通quickCheck上使用Bool及其变种,它只会巧妙地运行一个" test&#34 ;;因此:

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