2010-12-03 15 views
3

ブーストテストフレームワークを使用してレガシーコードにテストを追加しています。BOOST_CHECK_CLOSEのエラー出力のフォーマット?

一つのそのような試験はexpectedPrice二重局所的に計算され、オブジェクトがテスト中のシステムから取得され

double expectedPrice = /*...local computation*/ 
BOOST_CHECK_CLOSE(expectedPrice, object->price, ACCURACY_THRESHOLD); 

かもしれません。

error in "MyTest": difference{0.21097%} between expectedPrice{4.7300000000000004} and object->price{4.7400000000000002} exceeds 1.0000000000000001e-05% 

もちろん、これはすべての小数点を除いて、読みにくいです。私が裸の倍精度を使用していて、他のいくつかの型を使用していないとすれば、テスト出力をより良く/異なってフォーマットする方法はありますか?

+0

@Martin - 間違いなくすべてダブルスです。より大きな閾値はここでどのように役立つでしょうか?彼らは実際に4.73と4.74のミスマッチです - 私はもっと読みやすい出力を探しています... – sdg

答えて

0

てSetPrecision < < COUT。既知の解決策。実装するのはちょっと難しいですが、私はまだいくつかの点でやりたいと思っています。一方で、iostreamライブラリが生成する出力が何であれ、あなたは悩まされています。

+0

"既知の解決策" - 私は自分のコードで実装できますか?あるいはそれは人を後押しすることで知られており、図書館は実装する必要がありますか? – sdg

+1

@sdgこれはライブラリが実装できるものです。基本的に浮動小数点値を正確に常に出力するアルゴリズムがあります。これは単純ではなく効率的でもありませんが、フレームワークのテストには非常に効果的です(ほとんどのiostreamライブラリで使用されているアルゴリズムと異なり、速いが0001または999999テールになりやすい)。 –

+0

Gennadlyは、事実上の標準のdtoa()アルゴリズムを意味します:http://www.netlib.org/fp/dtoa.c –

0

あなたは試みることができる:

これは既知の問題です(2)

+0

ありがとう - 試しましたが、変更されませんでした。私はブーストがカバーの下にある何かを使用していると仮定します... – sdg

+0

コードの外見からは、単に演算子<<を使用しています。どのOstreamを使用しているか把握できれば、これはうまくいくはずです... – Mike