文字列をエンコード/デコードする一連の簡単なデモ プログラムがあり、それらに対していくつかのquickCheckテストを生成したいが、テストを印刷可能な文字列のみに限定したい。生成されたテスト ケースと拒否されたテスト ケースが多すぎるため、ガードの使用は遅すぎて失敗するため、このドメイン用の安全なジェネレーターを作成したいと考えています。
私が見た this への参照は、(1) Charの独自のArbitraryインスタンスを定義し、それを使用して文字列の印刷可能な文字のみを生成するか、(2) 関数自体をnewtypeでラップしてArbitraryを記述する必要があることを示しています。そのためのインスタンス。
しかし、(1) これを実行しようとすると失敗します。Test.QuickCheck にこれの定義があるためです。これを行うにはどうすればよいでしょうか。新しい型のsafeCharジェネレーターを作成し、テストされた関数へのアダプターを再度作成する必要があります。 ? (これに関する RWH 本のセクションでは、この DIY Char 定義を推奨するのは時代遅れであると述べています。)
(2) を実行しようとすると、ローカライズされた単純な (しかし失敗する) テスト命題にガードを追加するか、新しいラッパーと関連するジェネレーターを作成することができますが、これは面倒に思えます。
明らかにこれは単純で (!)、すべてのツールが提供されていますが、誰かがこれが正しい分析であるかどうかをアドバイスし、これを行う最善の方法の例を挙げてもらえますか?