2014年5月21日水曜日

iutest_c v1.4.0 をリリースしました

iutest_c v1.4.0 をリリースしました。
約9ヶ月ぶりの更新です。
iutest (C++ testing framework)の方にかかりきりで更新できていませんでしたが、C11 の _Generic が gcc 4.9 で使えるようになったらしいので、対応作業に移る前にリリースすることにしました。

変更点は以下のとおりです。

  • 追加
    • IUTEST_SKIP 追加
    • iuBoolean パラメータジェネレータを追加
    • セクション指定に対応
    • 機能削減用コンフィグマクロを追加
  • 修正
    • コードサイズ削減

v1.5.0 では _Generic に対応したいなぁーと思っていますが・・・
果たして、C言語のテスティングフレームワークって需要あるんですかね?

2014年5月19日月曜日

iutest v1.9.0 をリリースしました

iutest v1.9.0 をリリースしました。

変更点は以下のとおりです。

  • 追加
    • IUTEST_*_THAT 追加
    • 式アサーション追加(IUTEST_ASSERT, IUTEST_EXPECT, IUTEST_INFORM, IUTEST_ASSUME)
    • 式アサーション追加(IUTEST_*_NOT)
    • IUTEST_USE_MAIN 追加(main 関数定義 config)
  • 変更
    • IUTEST_ASSERT を IUTEST_ASSERT_EXIT に変更

今回の目玉は式アサーションと THAT の追加です。
以下より、追加された機能の紹介をしていきます

IUTEST_*_THAT 追加
テスティングフレームワークでは多くみられる that アサーションに対応しました。
といっても、まだとりあえず対応した程度のものです。

現在使用できる matcher は、以下の6つです。
StartsWith前方一致
Contains部分一致
EndsWith後方一致
Equals完全一致
AllOfすべての matcher が真
AnyOf1つ以上の matcher が真
以前、紹介した Catch 相当の matcher は揃えましたが、Google Mock の matcher にはまだまだな状態です。
今後のバージョンアップで、matcher に matcher を適用できるようにするなど、より便利にしていく予定です。

式アサーション追加
もう1つアサーションを追加しました。
これまでのアサーションは、== なら EQ, <= なら LE など比較の仕方によってそれに対応するアサーションを使う必要がありました。

IUTEST_ASSERT_EQ(0, x);
IUTEST_ASSERT_LE(x, 1);

今回追加した式アサーションでは、式に対してアサーションとして機能するため、== や <= などの比較演算子の違いを意識せず、同じアサーションを使用できます。

int f() { return 42; }
IUTEST(Expression,Test)
{
    IUTEST_EXPECT(f() == 0);
    IUTEST_EXPECT(f() <= 1);
}
もちろん、失敗時の出力には f() の値が出力されます。

※C++03 の場合、算術演算子の展開に若干の制限があります。
詳細はコードを確認してみてください。(この辺なんとかしたいですが…)

|| や && を使用する場合は展開されませんので、IUTEST_EXPRESSION か IUTEST_OPERAND を使用してください。
IUTEST_EXPECT(f() == 0 IUTEST_OPERAND(||) f() == 1);
IUTEST_EXPECT(f() >= 0 && IUTEST_EXPRESSION(f() <= 1));

(展開前の式に内部実装が出力されてしまうのもなんとかしたい…)

IUTEST_USE_MAIN 追加
IUTEST_USE_MAIN マクロを定義することで、main 関数の記述を省略できます。 使用する場合は、プロジェクト1つに対して、1つのソースコードでこのマクロを定義してください。

今後の予定
matcher の強化や細かな部分の改善を予定しています。
C言語版の iutest_c の v1.4.0 を近日リリース予定です。

2014年5月13日火曜日

[Visual Studio] カスタムビルドツール

Visual Studio にはカスタムビルドツールというものがあります。
今回はこれを紹介したいと思います。

と、その前にカスタムビルドツールの使いドコロとして、私が利用した時の例を上げようと思います。
データ変換とビルド
とあるプロジェクトでは、とあるデータをコンバートしそれを使ってビルドをする仕組みでした。
(データ変換をするプロジェクトは割りとあるのではないでしょうか?)

とあるプロジェクトでは、その変換をビルド前イベントで全て行っていました。
そのため、一部のファイルにしか変更がなくても全てのデータ変換が行われ、さらにその出力ファイルが更新され依存関係にある部分が再ビルドされてしまう…そんな状態でした。

変更してないのに再ビルドとか嫌っ!ってことで、カスタムビルドツールの出番です。

カスタムビルドツールは各ファイルごとに設定できます。
そのファイルに変更があった場合にカスタムビルドが実行されます。また、出力ファイルが削除されたりした場合にも実行されます。

これにより、元データに変更がかかった場合にのみ再ビルドがされるように設定できます。

カスタムビルドツールの設定
MSDN - カスタム ビルド ツールの指定
カスタムビルドツールはファイルごとに設定します。
ファイルのプロパティを開き、「構成プロパティ」-「全般」-「項目の種類」から「カスタム ビルド ツール」を選択します。
ここで一度「適用」をクリックします。すると「構成プロパティ」に「カスタム ビルド ツール」の項目が表示されます。


「コマンド ライン」にビルド処理を記述します。
「出力ファイル」にはビルド処理で出力されるファイルを記述します。(複数ある場合は ";" で区切る)

最小設定は以上です。

まとめ
カスタムビルドツールは、ファイルそれぞれに対してプロジェクトの設定をする必要があるので、
若干、いや、量によってはスゴクめんどくさいですが・・・
こんな方法もあるというのだけでも、覚えておくといいと思います。
※ 簡単な方法があれば教えて下さい。

今回は以上です。