2012年2月12日日曜日

Boost.Test Step 3

とりあえず奇数判定を行う関数を実装し,適当にテストしてみる.

#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 件のコメント:

コメントを投稿