2017-08-14 6 views
8

ハスケルでサンプルスペースリークのコレクションを書いています。実際にスペースをリークしないサンプルを挿入する場合に備えて、テストスイートを作成したいと思います。ハスケル関数にスペースリークがあることをテストします。

サンプルを個別に実行可能にすることなくサンプルをテストする方法はありますか?

+4

ニール・ミッチェルは非常に効果的と自身のブログ上で説明した非常にローテクな技術があります:[スペース をリーク検出](のhttp://をneilmitchell.blogspot.com/2015/09/detecting-space-leaks.html)。 – Cactus

+0

将来的には静的アナライザーを使ってこれをチェックすることができます:)もしこれが形式化できれば、スペースリークを検出することはアルゴリズムを実装することだけです。 – Shersh

+0

@Cactus:それは素晴らしい記事です。残念ながら、メモリが足りなくなったときに生成される例外をキャッチすることが可能かどうかはわかりません(意味があります)。私は 'System.Posix.process.forkProcess'を使って別のプロセスで例外を生成し、' ClassyPrelude.catchAny'でそれをキャッチしてみましたが、まだテストスイートをスリップさせてクラッシュさせます。 – seagreen

答えて

2

テストでスペースリークを検出できますが、スペースリークがないことを証明することはできません。メモリプロファイルが比較的低い場合でも、スペースリークが非常に小さく、十分な反復を行っていないことがわかります。ここで説明するように、あなたが割当て制限とカウンタを使用することができますスペースリークを検出するには

May I limit memory usage per function/monad/thread in Haskell?

関連する問題