#define BOOST_TEST_DYN_LINK #define BOOST_TEST_MODULE OddTest #include <boost/test/unit_test.hpp> #include <boost/test/unit_test_suite.hpp> // 奇数判定を実装 // 奇数は2で割った余りが1になる数? bool isOdd(int n) { return n % 2 == 1; } BOOST_AUTO_TEST_CASE(oddTest) { // 非負偶数の場合 BOOST_CHECK_EQUAL(isOdd(0), false); BOOST_CHECK_EQUAL(isOdd(2), false); // 非負奇数の場合 BOOST_CHECK_EQUAL(isOdd(1), true); BOOST_CHECK_EQUAL(isOdd(3), true); }
実行結果はこんな感じ.
Running 1 test case... *** No errors detected
正しく動作するものを書いたので,当然成功する.ところが,テストケースにちょっと判定文を追加すると,テストに失敗する.
BOOST_AUTO_TEST_CASE(oddTest) { // 非負偶数の場合 BOOST_CHECK_EQUAL(isOdd(0), false); BOOST_CHECK_EQUAL(isOdd(2), false); // 非負奇数の場合 BOOST_CHECK_EQUAL(isOdd(1), true); BOOST_CHECK_EQUAL(isOdd(3), true); // 負偶数の場合 BOOST_CHECK_EQUAL(isOdd(-2), false); BOOST_CHECK_EQUAL(isOdd(-4), false); // 負奇数の場合 BOOST_CHECK_EQUAL(isOdd(-1), true); BOOST_CHECK_EQUAL(isOdd(-3), true); }
出力結果は次のようになる.
Running 1 test case... main.cpp:27: error: in "oddTest": check isOdd(-1) == true failed [false != true] main.cpp:28: error: in "oddTest": check isOdd(-3) == true failed [false != true] *** 2 failures detected in test suite "OddTest"
原因は奇数の定義を2で割った余りが1になるとしたこと.この割った余りを正数にするか,
負数にするかっていうのは言語によって違うのだけれど,この場合,2で割り切れなければ奇数,つまり2で
割った余りが0で無ければ良いので,関数を修正する.
bool isOdd(int n) { return n % 2 != 0; }
これで無事テストが通る.
0 件のコメント:
コメントを投稿