2012-08-13 4 views
6

クイックチェックを使用してコードの数値計算をテストしています。基本的には、正確な関数とそれよりも効率的ないくつかの近似があります。非ブールテストのクイックチェック

私は現在、私のようなものをテストしたいプロパティ実装しています:

prop_blah input = (abs $ (exact input)-(approx input)) < threshold 

をしかし、近似アルゴリズムのそれぞれが正確にどのように正確に知っているし、お互いにそれらを比較するために、本当にいいだろう。これを行う簡単な方法の1つは、不等式の左辺の平均と標準偏差の報告を得ることです。これは何とか可能ですか?

+3

さて、あなたはまだ、ランダムな入力を生成するためのQuickCheckのフレームワークを使用することができます。統計を計算するためには、明らかに[statistics](http://hackage.haskell.org/package/statistics)というパッケージが好きかもしれません。 –

+0

私はあなたが 'approx'が正しい答えから離れて* x *離れないという証拠が必要だと思います。その知識でquickcheckプロパティは簡単です。つまり、あなたのおよその機能を理論的に分析するのに役立つかもしれません。 – Tarrasch

+1

@Tarrasch私はこのような証拠が良いと思うことに同意しますが、残念ながらこれらのアルゴリズムは一般的にかなりうまくいくが、最悪の場合のパフォーマンスは悪いです。 NP完全問題のヒューリスティックのような並べ替え。 –

答えて

2

プリントアウトする必要がある場合は、1回のテスト後に実行されるクイックチェックコールバックをチェックする必要があります。それらの定義はTest.QuickCheck.P​​ropertyにあります

そうでなければ、Test.QuickCheck.P​​ropertyにあるcollect :: (Show a, Testable prop) => a -> prop -> Property関数を使用できます。

let a = (abs $ (exact input)-(approx input)) 
in collect a (a < threshold) 

このようにして、少なくとも近似値の文字列表現を作成し、いくつの単一テストがどれくらい同じ近似を与えるかを知ることができます。

あなたも、近似の質を取り除くだけ実行して要因を一覧表示できます。

prop = collect (abs $ (exact input)-(approx input)) True 
関連する問題