TZTesterを更に更に改良する (C++0x編)

まず、生成されるソースコードを載せておきます。

//(大量の#includeは略)

using namespace std;

//(typedefも略)

//(マクロも略)

class P8XGraphBuilder {
public:

  int solve( vector <int> _scores ) {



  }
};

// BEGIN CUT HERE
#include "/home/wistery/.topcoder/P8XGraphBuilder_solve.h"
#include <initializer_list>
int main(int argc, char **argv){
    bool verbose_ = false;
    int runno_ = -1;
    if (argc >= 2) if(!strcmp(argv[1], "-v")) verbose_ = true;
    if (argc == 2 && !verbose_) runno_ = atoi(argv[1]);
    else if (argc == 3 && verbose_) runno_ = atoi(argv[2]);

    CASE(0){
        vector <int> scores = {1, 3, 0};

        int _ = 8;
        RUN_TEST();
    }
    CASE(1){
        vector <int> scores = {0, 0, 0, 10};

        int _ = 10;
        RUN_TEST();
    }
    CASE(2){
        vector <int> scores = {1, 2, 3, 4, 5, 6};

        int _ = 12;
        RUN_TEST();
    }
    CASE(3){
        vector <int> scores = {5, 0, 0};

        int _ = 15;
        RUN_TEST();
    }
    CASE(4){
        vector <int> scores = {1, 3, 2, 5, 3, 7, 5};

        int _ = 20;
        RUN_TEST();
    }
    notify_memory_usage();

}
// END CUT HERE

テストコードの部分が従来より更にすっきりしています。

なぜすっきりしたのか

initializer_list

vectorを{1,2,3}のように初期化出来るようになったC++0xの機能です。
これは普段からふつうに便利です。
今日から、こどふぉでは0xに乗り換えましょう!

マクロをヘッダに逃した

Topcoderの提出ファイルは1ファイルで完結している必要があるため、オレオレヘッダは基本的には使えません。
しかし、テストコードはそもそも提出しないので、その部分で、編集時に見たくないマクロはヘッダに逃がしてしまうことができます(これはC++0xとは特に関係ない)
$HOME/.topcoder/(クラス名)_(メソッド名).h
が自動生成され、それがincludeされます。

使い方

  • TZTester.jarを新しいTZTester.jarで置き換えます。
  • テンプレートを少し書き換えます。テンプレートの例を示します。
//(#includeは略)

using namespace std;

//(typedefは略)

//(マクロは略)

class $CLASSNAME$ {
public:
  $RC$ $METHODNAME$( $METHODPARMS$ ) {
    
    
    
  }
};

$TESTCODE$

ダウンロード

https://github.com/wistery-k/tztester_w
ここからダウンロードできます。
makeしてください。make installは自分用なので、使わないでください。手動でcpしてください。

謝辞

http://d.hatena.ne.jp/sabottenda/20110702/1309610241
のコードを元にしました。ありがとうございます。