iutest  1.17.1.0
assertion.cpp
//======================================================================
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//======================================================================
#include "../include/iutest.hpp"
int f()
{
return 42;
}
/* ---------------------------------------------------
* 各種アサーション
*//*--------------------------------------------------*/
/* ---------------------------------------------------
* 式アサーション
*//*--------------------------------------------------*/
IUTEST(ExpressionTest, Test)
{
IUTEST_EXPECT(f() == 42);
IUTEST_EXPECT(f() + f() == 84);
IUTEST_EXPECT(f() == 42 && true);
IUTEST_EXPECT_NOT(f() != 42);
}
IUTEST(AssertionTest, NoFailure)
{
}
IUTEST(AssertionTest, Base)
{
int x0=0, y0=0, x1=1;
float f0=0.0f, f1=1.0f;
double d0=0.0, d1=1.0;
// true/false
{
IUTEST_EXPECT_TRUE(100 == 100);
IUTEST_EXPECT_FALSE(100 != 100);
}
// EQ
{
int* zero=NULL;
IUTEST_EXPECT_EQ(NULL, zero);
::std::vector<int> v1, v2;
}
// NE
{
int* one=reinterpret_cast<int*>(1);
IUTEST_EXPECT_NE(NULL, one);
}
// LE, LT
{
IUTEST_EXPECT_LE(0.0, 0x1);
IUTEST_EXPECT_LT(0.0, 0x1);
}
// GE, GT
{
IUTEST_EXPECT_GE(0x1, 0.0f);
IUTEST_EXPECT_GT(0x1, 0.0f);
}
// float. double
{
IUTEST_EXPECT_FLOAT_EQ(-1.0f, -2.0f/2.0f);
IUTEST_EXPECT_DOUBLE_EQ(-1.0, -2.0/2.0);
}
// Near
{
IUTEST_EXPECT_NEAR(1.0f, 4.0f, 4);
IUTEST_EXPECT_NEAR(2.0, 1.0, 2);
}
}
IUTEST(AssertionTest, Base2)
{
// NULL
{
int* p1 = NULL;
void* p2 = &p1;
}
// SAME
{
int v = 0;
int* p1 = &v;
}
// EQ_COLLECTIONS/EQ_RANGE
{
int aa[] ={ 0, 1, 2, 3, 4 };
int ab[] ={ 0, 1, 2, 3, 4 };
IUTEST_EXPECT_EQ_COLLECTIONS(aa, aa+(sizeof(aa)/sizeof(aa[0])), ab, ab+(sizeof(ab)/sizeof(ab[0])));
#if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
#endif
}
// NE_COLLECTIONS/NE_RANGE
// NE_COLLECTIONS
{
int aa[] ={ 0, 1, 2, 3, 4 };
int ab[] ={ 9, 1, 2, 3, 4 };
IUTEST_EXPECT_NE_COLLECTIONS(aa, aa+(sizeof(aa)/sizeof(aa[0])), ab, ab+(sizeof(ab)/sizeof(ab[0])));
#if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
#endif
}
}
#if !defined(IUTEST_USE_GTEST)
#if IUTEST_HAS_ASSERTION_NOEQUALTO_OBJECT
struct TestObjectX
{
int a, b, c;
};
IUTEST(AssertionTest, MemCmpEQ)
{
TestObjectX x={ 0, 1, 2 };
TestObjectX y={ 0, 1, 2 };
}
#endif
#endif
IUTEST(AssertionTest, Cpp11)
{
#if IUTEST_HAS_CHAR16_T
const char16_t c16[] = u"test";
IUTEST_EXPECT_STREQ(c16, u"test");
#endif
#if IUTEST_HAS_CHAR32_T
const char32_t c32[] = U"test";
IUTEST_EXPECT_STREQ(c32, U"test");
#endif
}
IUTEST(AssertionTest, String)
{
const char mbs[] = "test";
const wchar_t wcs[] = L"test";
IUTEST_EXPECT_STREQ( "test", mbs);
IUTEST_EXPECT_STREQ(L"test", wcs);
IUTEST_EXPECT_STRNE( "host", mbs);
IUTEST_EXPECT_STRNE(L"host", wcs);
{
::std::string str1 = "test";
IUTEST_EXPECT_EQ(str1, "test");
IUTEST_EXPECT_NE(str1, "host");
}
{
::std::string str1 = "tEst";
::std::string str2 = "teSt";
::std::string str3 = "hoSt";
IUTEST_EXPECT_STRCASEEQ("TeSt", str1);
IUTEST_EXPECT_STRCASEEQ(str1, "TeSt");
IUTEST_EXPECT_STRCASENE("HoSt", str1);
IUTEST_EXPECT_STRCASENE(str1, "HoSt");
}
}
#if defined(IUTEST_OS_WINDOWS)
IUTEST(AssertionTest, HResult)
{
IUTEST_EXPECT_HRESULT_SUCCEEDED(0);
IUTEST_EXPECT_HRESULT_FAILED(-1);
}
#endif
/* ---------------------------------------------------
* 述語アサーション
*//*--------------------------------------------------*/
static bool IsOdd(int val)
{
return (val & 1) != 0;
}
static bool IsGreater(int a, int b)
{
return a > b;
}
static bool PredTest3(int , int , int )
{
return true;
}
static bool PredTest4(int , int , int , int )
{
return true;
}
static bool PredTest5(int , int , int , int , int )
{
return true;
}
IUTEST(AssertionTest, Pred)
{
IUTEST_EXPECT_PRED2(IsGreater, 3, 1);
IUTEST_EXPECT_PRED3(PredTest3, 0, 1, 2);
IUTEST_EXPECT_PRED4(PredTest4, 0, 1, 2, 3);
IUTEST_EXPECT_PRED5(PredTest5, 0, 1, 2, 3, 4);
}
#if IUTEST_HAS_STATIC_ASSERT_TYPEEQ
/* ---------------------------------------------------
* 型の一致テスト
*//*--------------------------------------------------*/
IUTEST(StaticTest, Eq)
{
IUTEST_ASSERT_TRUE( (::iutest::StaticAssertTypeEq<int, int>()) );
//iutest::StaticAssertTypeEq<bool, int>();
}
#endif
#if IUTEST_HAS_REGEX
IUTEST(AssertionTest, Regex)
{
const char test [] = "te0123st";
IUTEST_ASSERT_MATCHES_REGEXEQ("te[0-9]*st", test);
}
#endif
/* ---------------------------------------------------
* 失敗の確認
*//*--------------------------------------------------*/
IUTEST(DISABLED_TestFailure, Expression)
{
IUTEST_EXPECT(f() > f() + 1 );
IUTEST_EXPECT_NOT(f() == 42);
IUTEST_EXPECT(f() && 0);
IUTEST_EXPECT(true && false);
}
IUTEST(DISABLED_TestFailure, EQ)
{
}
IUTEST(DISABLED_TestFailure, NE)
{
int x=1, y=1;
}
IUTEST(DISABLED_TestFailure, GE)
{
float a = 0.1f, b = 1.0f;
}
IUTEST(DISABLED_TestFailure, TRUE)
{
}
IUTEST(DISABLED_TestFailure, FALSE)
{
}
IUTEST(DISABLED_TestFailure, Fail)
{
IUTEST_FAIL() << "add messages.\n";
}
#if defined(IUTEST_OS_WINDOWS)
IUTEST(DISABLED_TestFailure, HRESULT)
{
IUTEST_ASSERT_HRESULT_SUCCEEDED(E_OUTOFMEMORY);
}
#endif
void AssertFunc()
{
}
IUTEST(DISABLED_TestFailure, NoFailure)
{
}
IUTEST(DISABLED_TestFailure, Pred)
{
int x=4, y=5;
IUTEST_EXPECT_PRED2(IsGreater, x, y);
}
IUTEST(DISABLED_TestFailure, Mix)
{
IUTEST_EXPECT_NEAR(0, 100, 2);
{
::std::string str1 = "test";
::std::string str2 = "text";
IUTEST_EXPECT_STREQ("text", str1);
IUTEST_EXPECT_STRNE("text", str2);
IUTEST_EXPECT_STRCASEEQ("Text", str1);
IUTEST_EXPECT_STRCASENE("Text", str2);
}
// EQ_COLLECTIONS
{
int aa[] = { 0, 1, 2, 3, 4 };
int ab[] = { 0, 1, 2, 3, 4, 5 };
char ac[] = { 0, 0, 2, 3, 5 };
IUTEST_EXPECT_EQ_COLLECTIONS(aa, aa+(sizeof(aa)/sizeof(aa[0])), ab, ab+(sizeof(ab)/sizeof(ab[0])));
IUTEST_EXPECT_EQ_COLLECTIONS(ab, ab+(sizeof(ab)/sizeof(ab[0])), aa, aa+(sizeof(aa)/sizeof(aa[0])));
IUTEST_EXPECT_EQ_COLLECTIONS(aa, aa+(sizeof(aa)/sizeof(aa[0])), ac, ac+(sizeof(ac)/sizeof(ac[0])));
}
}
IUTEST_EXPECT_DOUBLE_EQ
#define IUTEST_EXPECT_DOUBLE_EQ(expected, actual)
double の比較 テスト
Definition: iutest.hpp:810
IUTEST_EXPECT_GE
#define IUTEST_EXPECT_GE(v1, v2)
>= テスト
Definition: iutest.hpp:724
IUTEST_EXPECT_PRED2
#define IUTEST_EXPECT_PRED2(pred, v1, v2)
述語 ASSERTION テスト
Definition: iutest_pred.hpp:109
IUTEST_EXPRESSION
#define IUTEST_EXPRESSION(expr)
式展開用マクロ
Definition: iutest_expression_assertion.hpp:31
IUTEST_EXPECT
#define IUTEST_EXPECT(...)
式アサーション
Definition: iutest.hpp:643
IUTEST_EXPECT_STRNE
#define IUTEST_EXPECT_STRNE(v1, v2)
文字列の不一致 テスト
Definition: iutest.hpp:853
IUTEST_EXPECT_STRCASEEQ
#define IUTEST_EXPECT_STRCASEEQ(expected_str, actual_str)
文字列の一致(大文字小文字区別なし) テスト
Definition: iutest.hpp:863
IUTEST_ASSERT_NO_FAILURE
#define IUTEST_ASSERT_NO_FAILURE(statement)
no new failure テスト
Definition: iutest.hpp:599
iutest::matchers::Eq
detail::EqMatcher< T > Eq(const T &expected)
Make Eq matcher
Definition: iutest_matcher.hpp:1862
IUTEST_EXPECT_NE_RANGE
#define IUTEST_EXPECT_NE_RANGE(expected, actual)
== テスト(range)
Definition: iutest_util_assertion.hpp:168
IUTEST_FAIL
#define IUTEST_FAIL()
明示的な失敗
Definition: iutest.hpp:184
IUTEST_EXPECT_GT
#define IUTEST_EXPECT_GT(v1, v2)
> テスト
Definition: iutest.hpp:732
IUTEST_EXPECT_TRUE
#define IUTEST_EXPECT_TRUE(...)
TRUE テスト
Definition: iutest.hpp:742
IUTEST_EXPECT_NE_COLLECTIONS
#define IUTEST_EXPECT_NE_COLLECTIONS(b1, e1, b2, e2)
== テスト(collection)
Definition: iutest_util_assertion.hpp:90
IUTEST_EXPECT_EQ
#define IUTEST_EXPECT_EQ(expected, actual)
== テスト
Definition: iutest.hpp:681
IUTEST_ASSERT_EQ
#define IUTEST_ASSERT_EQ(expected, actual)
== テスト
Definition: iutest.hpp:281
IUTEST_ASSERT_TRUE
#define IUTEST_ASSERT_TRUE(...)
TRUE テスト
Definition: iutest.hpp:342
IUTEST_EXPECT_PRED3
#define IUTEST_EXPECT_PRED3(pred, v1, v2, v3)
述語 ASSERTION テスト
Definition: iutest_pred.hpp:186
IUTEST_EXPECT_LT
#define IUTEST_EXPECT_LT(v1, v2)
< テスト
Definition: iutest.hpp:716
IUTEST_ASSERT_NO_FATAL_FAILURE
#define IUTEST_ASSERT_NO_FATAL_FAILURE(statement)
no new fatal failure テスト
Definition: iutest.hpp:609
IUTEST_EXPECT_NULL
#define IUTEST_EXPECT_NULL(...)
NULL テスト
Definition: iutest.hpp:767
IUTEST_EXPECT_LE
#define IUTEST_EXPECT_LE(v1, v2)
<= テスト
Definition: iutest.hpp:708
IUTEST_ASSERT_NE
#define IUTEST_ASSERT_NE(v1, v2)
!= テスト
Definition: iutest.hpp:300
IUTEST_EXPECT_FLOAT_EQ
#define IUTEST_EXPECT_FLOAT_EQ(expected, actual)
float の比較 テスト
Definition: iutest.hpp:801
IUTEST_EXPECT_NO_FATAL_FAILURE
#define IUTEST_EXPECT_NO_FATAL_FAILURE(statement)
no new fatal failure テスト
Definition: iutest.hpp:1009
IUTEST_INFORM_NO_FATAL_FAILURE
#define IUTEST_INFORM_NO_FATAL_FAILURE(statement)
no new fatal failure テスト
Definition: iutest.hpp:1419
IUTEST_EXPECT_PRED4
#define IUTEST_EXPECT_PRED4(pred, v1, v2, v3, v4)
述語 ASSERTION テスト
Definition: iutest_pred.hpp:271
IUTEST_EXPECT_EQ_COLLECTIONS
#define IUTEST_EXPECT_EQ_COLLECTIONS(b1, e1, b2, e2)
== テスト(collection)
Definition: iutest_util_assertion.hpp:45
IUTEST_EXPECT_NEAR
#define IUTEST_EXPECT_NEAR(v1, v2, abs_v)
2値の差の範囲 テスト
Definition: iutest.hpp:834
IUTEST_EXPECT_NOT
#define IUTEST_EXPECT_NOT(...)
式アサーション
Definition: iutest.hpp:655
IUTEST_EXPECT_FAIL
#define IUTEST_EXPECT_FAIL()
明示的な失敗
Definition: iutest.hpp:1018
IUTEST_EXPECT_PRED1
#define IUTEST_EXPECT_PRED1(pred, v1)
述語 ASSERTION テスト
Definition: iutest_pred.hpp:40
IUTEST_EXPECT_PRED5
#define IUTEST_EXPECT_PRED5(pred, v1, v2, v3, v4, v5)
述語 ASSERTION テスト
Definition: iutest_pred.hpp:365
IUTEST_EXPECT_STRLNEQ
#define IUTEST_EXPECT_STRLNEQ(len, v2)
文字列長の一致 テスト
Definition: iutest_util_assertion.hpp:205
IUTEST_EXPECT_SAME
#define IUTEST_EXPECT_SAME(v1, v2)
アドレス一致 テスト
Definition: iutest.hpp:791
IUTEST_EXPECT_STREQ
#define IUTEST_EXPECT_STREQ(expected_str, actual_str)
文字列の一致 テスト
Definition: iutest.hpp:844
IUTEST_EXPECT_FALSE
#define IUTEST_EXPECT_FALSE(...)
FALSE テスト
Definition: iutest.hpp:754
IUTEST_EXPECT_NOTNULL
#define IUTEST_EXPECT_NOTNULL(...)
NOT NULL テスト
Definition: iutest.hpp:779
IUTEST
#define IUTEST(testcase_, testname_)
テスト関数定義マクロ
Definition: iutest.hpp:66
IUTEST_ASSERT_FALSE
#define IUTEST_ASSERT_FALSE(...)
FALSE テスト
Definition: iutest.hpp:354
IUTEST_ASSERT_GE
#define IUTEST_ASSERT_GE(v1, v2)
>= テスト
Definition: iutest.hpp:324
IUTEST_ASSUME_EQ
#define IUTEST_ASSUME_EQ(expected, actual)
== テスト
Definition: iutest.hpp:1483
IUTEST_EXPECT_NE
#define IUTEST_EXPECT_NE(v1, v2)
!= テスト
Definition: iutest.hpp:700
IUTEST_EXPECT_EQ_RANGE
#define IUTEST_EXPECT_EQ_RANGE(expected, actual)
== テスト(range)
Definition: iutest_util_assertion.hpp:131
IUTEST_EXPECT_STRCASENE
#define IUTEST_EXPECT_STRCASENE(v1, v2)
文字列の不一致(大文字小文字区別なし) テスト
Definition: iutest.hpp:872