2011年12月10日

BOOST_TEST_DONT_PRINT_LOG_VALUE()が効くBOOST_CHECK_EQUAL_COLLECTIONS()を作る

この記事は……

Boost Advent Calendar 2011の一環として書かれた。ボレロ村上さんから引き継いだ、10日目である。

Advent Calendarとは何か? については、例えば師走を楽しもう。技術系アドベントカレンダーの魅力とは - @ITを参照の事。

参加者を見回すと、STAR WARSに出てくるシスの暗黒卿ばりに黒のローブを引きずったC++闇の軍団ばっかりで非常に恐ろしい。しかし、話を振られてしまったら、参加するしかないじゃない! あなたも、私も……!

なお、当記事中で言及するBoostのバージョンは、記事執筆時点での最新バージョンであるVersion 1.48.0を前提としている。

BOOST_CHECK_EQUAL_COLLECTIONS()マクロ

Boost.Testにおいて、コンテナに格納されている値を検証するにはBOOST_CHECK_EQUAL_COLLECTIONS()マクロを利用する。他のマクロと同様、BOOST_WARN_EQUAL_COLLECTIONS(), BOOST_REQUIRE_EQUAL_COLLECTIONS()という、異なるlevelのマクロも存在する。この記事では便宜上、これら3つをひっくるめてBOOST_CHECK_EQUAL_COLLECTIONSと呼ぶ事にする。

詳細な使用法は、The UTF testing tools referenceBOOST_<level>_EQUAL_COLLECTION項を参照。

BOOST_TEST_DONT_PRINT_LOG_VALUE()マクロ

BOOST_TEST_DONT_PRINT_LOG_VALUE()マクロは、BOOST_CHECK_EQUAL()等で検証した値をログに出力しない事を指定する物だ。BOOST_CHECK_EQUAL()等で検証するオブジェクトは出力ストリームへのoperator<<をサポートしている必要が有る。が、全ての型がそれをサポートしているという事はあり得ない。例えばstd::pairがそれに当たる。そういった型をこのマクロで指定すると、テスト結果のログに、その型のオブジェクトの値は出力されなくなる。

詳細はTest log outputを参照。

BOOST_TEST_DONT_PRINT_LOG_VALUE()対応BOOST_CHECK_EQUAL_COLLECTIONS

さて、BOOST_TEST_DONT_PRINT_LOG_VALUE()マクロだが、困った事にBOOST_CHECK_EQUAL_COLLECTIONS()マクロでのログ出力においては適応されない。これは困る。

という訳で、BOOST_TEST_DONT_PRINT_LOG_VALUE()に対応したBOOST_CHECK_EQUAL_COLLECTIONS()を作ってみる。

続きを読む


posted by 天井冴太 at 21:52| Comment(7) | TrackBack(0) | Other | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。