BOOST_AUTO_TEST_CASE
を使うと、init_unit_test_suite を書く必要がなくなります。プリンスオブペルシャはずいぶん前に終わってるんですが、いまさら書いてみます。
そんなわけで、前に書いた goban-test.cpp はこんなふうになります。
#include "goban.h" #define BOOST_TEST_MODULE GobanTest #include <boost/test/unit_test.hpp> using namespace boost::unit_test_framework; BOOST_AUTO_TEST_CASE(point_test) { BOOST_TEST_CHECKPOINT("reference x, y"); Point p(3, 4); BOOST_CHECK_EQUAL(p.x, 3); BOOST_CHECK_EQUAL(p.y, 4); BOOST_TEST_CHECKPOINT("up, down, left, right"); Point pu = p.up(); Point pd = p.down(); Point pl = p.left(); Point pr = p.right(); BOOST_CHECK_EQUAL(pu.x, p.x); BOOST_CHECK_EQUAL(pu.y, p.y - 1); BOOST_CHECK_EQUAL(pd.x, p.x); BOOST_CHECK_EQUAL(pd.y, p.y + 1); BOOST_CHECK_EQUAL(pl.x, p.x - 1); BOOST_CHECK_EQUAL(pl.y, p.y); BOOST_CHECK_EQUAL(pr.x, p.x + 1); BOOST_CHECK_EQUAL(pr.y, p.y); BOOST_TEST_CHECKPOINT("around"); Points ps = p.around(); BOOST_CHECK(ps->size() == 4); BOOST_CHECK(ps->find(pu) != ps->end()); BOOST_CHECK(ps->find(pd) != ps->end()); BOOST_CHECK(ps->find(pl) != ps->end()); BOOST_CHECK(ps->find(pr) != ps->end()); BOOST_TEST_CHECKPOINT("operator<"); BOOST_CHECK(!(p < p)); BOOST_CHECK(pu < p); BOOST_CHECK(p < pd); BOOST_CHECK(pl < p); BOOST_CHECK(p < pr); }
BOOST_TEST_CHECKPOINT とか around とか operator< とか、いろいろ増えてますが、気にしないで下さい。あと、BOOST_TEST_MODULE は必須かどうか確かめてません。
(2011-07-27 追記: 必須らしいです。コメントにて id:maraigue さんが教えてくださいました。)
また、このように BOOST_AUTO_TEST_CASE を使うと、各 TEST_CASE を個別に実行することができるようになります。
$ ./goban-test --run_test=point_test
まぁ、この例だと、TEST_CASE が 1 つしかないので、意味がないんですが。