演算子を使用して==>
、ブール条件をプロパティに付加できます。
prop_merge xs ys = (sorted xs && sorted ys) ==> sorted (merge xs ys)
これは構文が優れているだけでなく、QuickCheckがテストが成功したテストケースと前提条件を満たさなかったテストケースを区別できるようにします。後者の場合、テストはカウントされず、QuickCheckは新しい入力を生成します。
ただし、ほとんどの入力が条件を満たさない場合、テストの実行が遅くなるか、十分な入力が破棄されると、QuickCheckは最終的にあきらめます。ランダムリストがソートされる可能性は低いため、上記の例ではこれが発生する可能性が非常に高くなります。
> quickCheck (prop_merge :: [Int] -> [Int] -> Property)
*** Gave up! Passed only 15 tests.
(を使用する代わりに標準のブール演算子を使用する==>
と、前提条件が失敗したためにほとんどのテストが役に立たなかった場合、QuickCheckは合格したすべてのテストについてブーストすることに注意してください)
このため、通常は、必要なテストケースのみを直接生成する方がはるかに優れています。単純なケースの場合、Test.QuickCheck.Modifiers
モジュールには、入力の生成方法を変更するいくつかの便利なニュータイプが含まれています。たとえば、OrderedList
修飾子は並べ替えられたリストのみを生成するため、プロパティを次のように簡単に記述できます。
prop_merge (Ordered xs) (Ordered ys) = sorted (merge xs ys)