私は、 "リストのような"シーケンスを作成するライブラリを作っており、多くのPreludeスタイル関数が実装されています。私のライブラリが正しい出力を出すためのテストケースをいくつか書きたいと思います。これを行う最も簡単な方法は、いくつかの関数を書いて結果をリストに変換し、Preludeの結果と比較することです。我々はこれを持って言うことができます:異なるタイプのHaskellでのテストケースの作成
import qualified MyLibrary as ML
import qualified Prelude as P
は、例えば、私は、次のテストケースをしたいことがあります。ML.enumFrom
はない出力リストを行い
P.take 5 (P.enumFrom 1) == toList (ML.take 5 (ML.enumFrom 1))
注こと、それはそれ自身のデータ型を出力します。
上記はうまくいきますが、私が「自分自身を繰り返している」ことに気づくでしょう(TM)。私はテストケースが間違っていなければ、左右が同じであることを保証する必要があります。
このようなテストケースを書く良い方法があるので、自分自身を繰り返す必要はありませんか?
2つのメカニズムを比較するためにテストが定義上「自分自身を繰り返す」場合は、実際に「自分自身を繰り返す」とは思わないのです。 –
理想的には、すべてのテストはどの関数を使うかを決めるパラメータを取るので、 'doTest test = test True == toList(test False)'のような 'doTest'関数を使うことができますが、型チェッカーが私を嫌うことなくこれを行う方法を見つけました。 – Clinton
@Clinton:私は、共通の 'クラス 'をインスタンス化せず、テンプレートhaskell(これは私が経験していないもの)を使用すると、それを達成できないと思います – jakubdaniel