2013年1月4日金曜日

Windows で eclipse ~CUTE実践編(3)~



続き。

Windows で eclipse ~CUTEインストール編~
Windows で eclipse ~CUTE入門編~
Windows で eclipse ~CUTE入門編 Part.2~
Windows で eclipse ~CUTE実践編(1)~

前回、Add( ) 関数を作ったので、今回は引き続き Sub( ) 関数を作ってみる。




■次のメソド「AplCalc::Sub( )」を実装する



前回に引き続き[AplCalc:Sub( )] を作ることにする。
実施手順は前回と同様。
  1. 手短な設計をする
  2. テストプログラムを作成する。
  3. テストプログラムをテスティングフレームワークに登録する。
  4. テストプログラムをビルドする。 > コンパイルエラーとなる。
  5. 製品コードの雛形を作成する。
  6. テストプログラムをビルド/実行する。 > テストに失敗(赤)する。
  7. 製品コードの中身を実装する。
  8. テストプログラムをビルド/実行する。 > テストに成功(緑)する。
  9. リファクタリングする。
  10. テストプログラムをビルド/実行する。 > テストに成功(緑)する。


下記仕様とする。

  • 入力値#1 から 入力値#2 を減算する。(#1 - #2)
  • 入力値#1、#2は、正負の値が入力される。
  • 減算して [-99999999] より小さい または [99999999]より大きい場合、エラー値を返す。
  • エラー値は [0x80000000] とする。

この仕様から考えられるテストパターンを洗い出した。


  • 0 - 0 = 0
  • 1 - 1 = 0
  • 99999999 - 0           = 99999999
  • 45000000 - 40000000    = 5000000
  • 40000000 - 45000000    = -5000000
  • (-45000000) - 40000000 = -85000000
  • (-40000000) - 45000000 = -85000000
  • 45000000 - (-40000000) = 85000000
  • 40000000 - (-45000000) = 85000000
  • 0 - 99999999           = -99999999
  • (-99999999) - 0        = -99999999
  • 0 - (-99999999)        = 99999999
  • 1 - (-99999998)        = 99999999
  • (-99999999) - 0        = -99999999
  • (-99999998) - 1        = -99999999
  • 1 - (-99999999)        = 0x80000000
  • (-99999999) - 1        = 0x80000000

以上に基づき、開発する。




▼テストプログラムを作成する。

前回作成した [AplCalcTest.cpp] にテスト関数を追加する。

  • [testSub( )] 追加
  • [ s.push_back(CUTE_SMEMFUN(AplCalcTest, testSub)); ] 追加

  <AplCalcTest.cpp>

#include "cute.h"
#include "ide_listener.h"
#include "cute_runner.h"
#include "AplCalcTest.h"
#include "AplCalc.h"

//-------------------------------------------------------
class AplCalcTest {
public :
    AplCalc Cal;

    void testAdd( ){
        ASSERT_EQUAL( (long)Cal.Add(0,0), (long)0 );
        ASSERT_EQUAL( (long)Cal.Add(1,1), (long)2 );
        ASSERT_EQUAL( (long)Cal.Add(99999998,1), (long)99999999 );
        ASSERT_EQUAL( (long)Cal.Add(1,99999998), (long)99999999 );
        ASSERT_EQUAL( (long)Cal.Add(99999999,1), (long)0x80000000 );
        ASSERT_EQUAL( (long)Cal.Add(1,99999999), (long)0x80000000 );
        ASSERT_EQUAL( (long)Cal.Add(99999999,99999999), (long)0x80000000 );
        ASSERT_EQUAL( (long)Cal.Add(45000000,-40000000), (long)5000000 );
        ASSERT_EQUAL( (long)Cal.Add(40000000,-45000000), (long)-5000000 );
        ASSERT_EQUAL( (long)Cal.Add(99999999,-99999999), (long)0 );
        ASSERT_EQUAL( (long)Cal.Add(-99999999,99999999), (long)0 );
        ASSERT_EQUAL( (long)Cal.Add(-45000000,40000000), (long)-5000000 );
        ASSERT_EQUAL( (long)Cal.Add(-40000000,45000000), (long)5000000 );
        ASSERT_EQUAL( (long)Cal.Add(-99999999,-99999999), (long)0x80000000 );
    }

    void testSub( ) {
        ASSERT_EQUAL( (long)Cal.Sub(0,0), (long)0 );
        ASSERT_EQUAL(     (long)Cal.Sub(1,1), (long)0 );
        ASSERT_EQUAL( (long)Cal.Sub(99999999,0), (long)99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(45000000,40000000), (long)5000000 );
        ASSERT_EQUAL( (long)Cal.Sub(40000000,45000000), (long)-5000000 );
        ASSERT_EQUAL( (long)Cal.Sub(-45000000,40000000), (long)-85000000 );
        ASSERT_EQUAL( (long)Cal.Sub(-40000000,45000000), (long)-85000000 );
        ASSERT_EQUAL( (long)Cal.Sub(45000000,-40000000), (long)85000000 );
        ASSERT_EQUAL( (long)Cal.Sub(40000000,-45000000), (long)85000000 );
        ASSERT_EQUAL( (long)Cal.Sub(0,99999999), (long)-99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(-99999999,0), (long)-99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(0,-99999999), (long)99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(1,-99999998), (long)99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(-99999999,0), (long)-99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(-99999998,1), (long)-99999999 );
        ASSERT_EQUAL( (long)Cal.Sub(1,-99999999), (long)0x80000000 );
        ASSERT_EQUAL( (long)Cal.Sub(-99999999,1), (long)0x80000000 );
    }
};

//-------------------------------------------------------
cute::suite make_suite_AplCalcTest(){
  cute::suite s;
    s.push_back(CUTE_SMEMFUN(AplCalcTest, testAdd));    s.push_back(CUTE_SMEMFUN(AplCalcTest, testSub)); return s;
}

以上で完了。



▼テストプログラムをテスティングフレームワークに登録する。


既に登録済みなので、なにもしなくてOK。


▼テストプログラムをビルドする。 > コンパイルエラーとなる。

テストプログラムが実装されたことを確認するため、ビルドを実施。
[AplCalc::Sub( )]が実装されていないため、ビルドエラーとなる。




▼製品コードの雛形を作成する。

製品コードが組み込まれたか確認するため、中身を実装せず雛形だけ追加する。


[long Add( long data1, long data2 );]を追加する。
ただし、関数の中身は [return 0;] だけとする。





▼テストプログラムをビルド/実行する。 > テストに失敗(赤)する。


製品コードの雛形が組み込まれたことを確認するため、ビルドとテストを実行する。
コードが組み込まれていないため、当然テストは失敗する。
  • ビルドが正常終了することを確認

  • テストが失敗する事を確認



▼製品コードの中身を実装する。

仕様通り動作する様実装する。




▼テストプログラムをビルド/実行する。 > テストに成功(緑)する。


テストをビルド/実行して、テストが成功する事を確認する。




▼リファクタリングする。

今回は気なる点はなかったので、現状維持とした。




関数2本分のTDDを書いた。
次回は、実際に製品プログラムに仕上げる所を書く。

0 件のコメント:

コメントを投稿