とりあえず奇数判定を行う関数を実装し,適当にテストしてみる.
#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;
}
これで無事テストが通る.