Haskell 从静态排列列表生成的快速检查

Haskell 从静态排列列表生成的快速检查,haskell,quickcheck,Haskell,Quickcheck,假设我有以下数据类型: data A = A1 | A2 | A3 data B = B1 A | B2 A 我可以很容易地生成一个包含B的所有可能性的列表。我想测试所有可能的排列,但我仍然想使用QuickCheck吐出列表中应用它的所有元素。在本例中,我想测试一条规则是否适用于所有可能性,因此我不想生成随机数据 假设我已经在一个列表中拥有了所有的可能性,那么如何让QuickCheck只输出列表中的每个元素一次呢?每次都给出相同的精确值集。假设您有如下情况: prop_for_b :: B

假设我有以下数据类型:

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

我可以很容易地生成一个包含B的所有可能性的列表。我想测试所有可能的排列,但我仍然想使用QuickCheck吐出列表中应用它的所有元素。在本例中,我想测试一条规则是否适用于所有可能性,因此我不想生成随机数据


假设我已经在一个列表中拥有了所有的可能性,那么如何让QuickCheck只输出列表中的每个元素一次呢?每次都给出相同的精确值集。

假设您有如下情况:

prop_for_b :: B -> Bool
prop_for_b = undefined

test_for_b :: IO ()
test_for_b = quickCheck prop_for_b
您可以在纯
Bool
s上使用
quickCheck
及其变体,它将智能地只运行一个“测试”;因此:


如果您可以自己轻松地生成所有排列,为什么不在单元测试中这样做而不调用QuickCheck呢?如果您生成自己的案例,QuickCheck对您没有任何帮助。我的所有测试都使用QuickCheck。我认为所有的数据都来自QuickCheck,而不是针对特殊情况做一些笨拙的事情,这会更好。如果QuickCheck可以将该列表一个接一个地输入到该检查中,那么我认为这会更干净。完全不符合我的想法。完全不同的东西,但正是我想要的。这是一种更简单的方法。
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