nlib

述語アサーションが定義されています。 [詳解]

[ソースコード]

名前空間

 nn::nlib
 共通して使われることの多いストリーム関連のクラス群や各種コンテナ、及びガシェットクラスが実装されています。nlib_nsはエイリアスです。
 
 nn::nlib::testing
 C++のコードをテストするためのフレームワークです。testingライブラリの機能一覧 の説明も御覧ください。
 

マクロ定義

既存のブール関数のテスト(ASSERT_PREDn)

bool型を返す関数がある場合、以下のマクロに与えることで失敗時に関数の引数を表示できます。

説明
以下が単純な例です。
bool IsEven(int n) { return n % 2 == 0; }
TEST(Pred, test) {
ASSERT_PRED1(IsEven, 1 + 2);
}
/*
Output:
[ RUN ] pred.test
IsEven(1 + 2) evaluates to false, where
1 + 2 evaluates to 3
[ FAILED ] pred.test (0 ms)
*/
#define ASSERT_PRED1(pred, v1)   NLIB_TESTING_PRED1_(pred, v1, NLIB_TESTING_FATAL_)
 pred(v1)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED2(pred, v1, v2)   NLIB_TESTING_PRED2_(pred, v1, v2, NLIB_TESTING_FATAL_)
 pred(v1, v2)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED3(pred, v1, v2, v3)   NLIB_TESTING_PRED3_(pred, v1, v2, v3, NLIB_TESTING_FATAL_)
 pred(v1, v2, v3)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED4(pred, v1, v2, v3, v4)   NLIB_TESTING_PRED4_(pred, v1, v2, v3, v4, NLIB_TESTING_FATAL_)
 pred(v1, v2, v3, v4)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED5_(pred, v1, v2, v3, v4, v5, NLIB_TESTING_FATAL_)
 pred(v1, v2, v3, v4, v5))が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
既存のブール関数のテスト(EXPECT_PREDn)

bool型を返す関数がある場合、以下のマクロに与えることで失敗時に関数の引数を表示できます。

#define EXPECT_PRED1(pred, v1)   NLIB_TESTING_PRED1_(pred, v1, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED1()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED2(pred, v1, v2)   NLIB_TESTING_PRED2_(pred, v1, v2, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED2()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED3(pred, v1, v2, v3)   NLIB_TESTING_PRED3_(pred, v1, v2, v3, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED3()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED4(pred, v1, v2, v3, v4)   NLIB_TESTING_PRED4_(pred, v1, v2, v3, v4, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED4()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED5_(pred, v1, v2, v3, v4, v5, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED5()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
テスト専用ブール関数の定義による表示のカスタマイズ(ASSERT_PRED_FORMATn)

ASSERT_PREDn()において失敗した場合のメッセージをカスタマイズしたい場合は以下のマクロを使います。

説明
以下が単純な書き方の例で、AssertionResult型を返す関数を定義してASSERT_TRUE等でテストします。
::testing::AssertionResult IsEven(int n) {
if (n % 2 != 0)
return ::testing::AssertionFailure() << n << " is not even";
return ::testing::AssertionSuccess();
}
TEST(PredAssertionResult, test) {
ASSERT_TRUE(IsEven(1 + 2));
}
/*
Output:
[ RUN ] pred.test
Value of: IsEven(1 + 2)
Actual: false (3 is not even)
Expected: true
[ FAILED ] pred.test (0 ms)
*/
より詳細にカスタマイズしたい場合は、以下のようにASSERT_PREDn()を利用します。
::testing::AssertionResult IsEven(const char* n_expr, int n) {
if (n % 2 != 0)
return ::testing::AssertionFailure() << n_expr << " is not even";
return ::testing::AssertionSuccess();
}
TEST(PredFormat, test) {
ASSERT_PRED_FORMAT1(IsEven, (1 + 2));
}
/*
Output:
[ RUN ] PredFormat.test
(1 + 2) is not even
[ FAILED ] PredFormat.test (0 ms)
[----------] 1 tests from PredFormat (0 ms total)
*/
#define ASSERT_PRED_FORMAT1(pred_format, v1)   NLIB_TESTING_PRED_FORMAT1_(pred_format, v1, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED1()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT2(pred_format, v1, v2)   NLIB_TESTING_PRED_FORMAT2_(pred_format, v1, v2, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED2()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3)   NLIB_TESTING_PRED_FORMAT3_(pred_format, v1, v2, v3, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED3()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4)   NLIB_TESTING_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED4()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED5()です。失敗した場合は現在実行中の関数から抜けます。
 
テスト専用ブール関数の定義による表示のカスタマイズ(EXPECT_PRED_FORMATn)

EXPECT_PREDn()において失敗した場合のメッセージをカスタマイズしたい場合は以下のマクロを使います。

#define EXPECT_PRED_FORMAT1(pred_format, v1)   NLIB_TESTING_PRED_FORMAT1_(pred_format, v1, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED_FORMAT1()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED_FORMAT2(pred_format, v1, v2)   NLIB_TESTING_PRED_FORMAT2_(pred_format, v1, v2, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED_FORMAT2()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3)   NLIB_TESTING_PRED_FORMAT3_(pred_format, v1, v2, v3, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED_FORMAT3()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4)   NLIB_TESTING_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED_FORMAT4()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED_FORMAT5()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 

詳解

述語アサーションが定義されています。

Pred.h に定義があります。