私は、いくつかのネストされたリストにQuickCheckを実行するには、このようなものしようとしている。だから、式はリテラルのリストであり、そのそれぞれが述語といくつかの引数が含まれていクイックチェックから収縮をうまく(小さく)するにはどうすればよいですか?
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
を。述語/引数は、それぞれ文字列形式の制約の論理和である値です。それは私達にリストのリストのリストを提供します、phew!
私のクイックチェックプロパティの1つが失敗した場合、私は分かりにくい出力を得る傾向があります。シュリンクを実験する前に、小さな値の小さな値しか生成できない任意のインスタンスを持つことでこれを回避しました。私のタイプごとにシュリンク関数を実装することは少し助けてくれますが、私が望むほど大きくはありません。私はまだ出力のpagefulを得る。
私が望むものは、リテラルの小さなリストです。各リテラルには値の小さなリストがあり、各リストにはできるだけ短い制約があります。しかし、私の現在の努力では、少なくともこれらのリストは、出力を恐ろしいものにするほど大きくなります。シュリンクの実装を調整しようとすると、QCが非常に長い時間がかかり始める(縮みを検索する)ことがわかります。
このようなネストされたデータを持つと、QuickCheckの失敗を理解する機会はどのように向上しますか?
私が試したいくつかの事柄:shrinkListをshrinkNothingに縮小し、この[alternative shrinkList](https://gist.github.com/1582767)はより多くの要素を削除しようとします。 – kowey
今のところ、私は縮み前のルートをとっています( 'take 5 <$>)。私は、あまりにもたくさんのことをしていると思っていて、私の任意の実装を変更したり、私はまだ、バグを見つけているようです – kowey
まったく答えはありませんが、QuickCheckではなくSmallCheckやLazySmallCheckを使ってみましたか? –