Skip to content

Commit

Permalink
update r713
Browse files Browse the repository at this point in the history
  • Loading branch information
srz-zumix committed Oct 5, 2014
1 parent da89c38 commit 325ae6b
Show file tree
Hide file tree
Showing 11 changed files with 207 additions and 44 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Changes for 1.11.0:
* Matcher に FloatEq,DoubleEq,NanSensitiveFloatEq,NanSensitiveDoubleEq を追加
* コンテナMatcher に Each,ElementsAre,ElementsAreArray を追加
* メンバーMatcher に Key,Pair,Field,Property を追加
* ワイルドカードMatcher A,_ を追加

** 修正
* IUTEST_*_FLOAT_EQ,DOUBLE_EQ で NAN の比較が真を返す不具合を修正
Expand Down
3 changes: 2 additions & 1 deletion doc/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ PROJECT_NAME = iutest
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER = 1.10.99.16
PROJECT_NUMBER = 1.10.99.17

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
Expand Down Expand Up @@ -2001,6 +2001,7 @@ PREDEFINED = __cplusplus \
IUTEST_ATTRIBUTE_UNUSED_ \
IUTEST_HAS_VARIADIC_TEMPLATES=1 \
IUTEST_HAS_EXCEPTIONS=1 \
IUTEST_HAS_MATCHERS=1 \
IUTEST_HAS_TESTNAME_ALIAS_JP \
IUTEST_BUILD_DOXYGEN

Expand Down
2 changes: 1 addition & 1 deletion doc/cover.html
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<div class="contents">
<h1>IUTEST</h1>
<div class="text_block">
Iris Unit Test Framework : 2014 / 10 / 03<br />
Iris Unit Test Framework : 2014 / 10 / 05<br />
<br />
</div>
<h2>はじめに</h2>
Expand Down
1 change: 1 addition & 0 deletions doc/wandbox.html
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ <h2>iuwandbox</h2>
<tr><td>--list_options COMPILER</td><td>COMPILER で利用可能なオプションを列挙します。</td></tr>
<tr><td>--stdin</td> <td>実行時の stdin の内容を指定します。</td></tr>
<tr><td>--encoding ENCODING</td><td>入力ソースコードファイルのエンコードを指定します。</td></tr>
<tr><td>--expand_include</td><td>入力ソースコードファイルに含まれる include を展開します。</td></tr>
<tr><td>-s, --save</td> <td>permarnent link を生成します。</td></tr>
<tr><td>--permlink ID</td> <td>ID の permarnent link の情報を取得します。--output オプションを指定すると、ソースコードをファイルに書き出します。</td></tr>
<tr><td>-o, --output FILE</td><td>--permlink 指定した際に取得したソースコードを FILE に書き出します。</td></tr>
Expand Down
116 changes: 115 additions & 1 deletion include/iutest_matcher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@

#if IUTEST_HAS_MATCHERS

/**
* @defgroup MATCHERS MATCHERS
* @brief Matchers
*/

//======================================================================
// define
/**
Expand Down Expand Up @@ -1000,6 +1005,59 @@ class PairMatcher : public IMatcher
const T2& m_m2;
};

/**
* @brief Any matcher
*/
template<typename T>
class AnyMatcher : public IMatcher
{
public:
AnyMatcher(void) {}
public:
AssertionResult operator ()(const T& actual) const
{
return AssertionSuccess();
}
template<typename U>
AssertionResult operator ()(const U& actual) const
{
return AssertionFailure() << WitchIs();
}

public:
::std::string WitchIs(void) const IUTEST_CXX_OVERRIDE
{
iu_global_format_stringstream strm;
strm << "A: " << detail::GetTypeName<T>();
return strm.str();
}
private:
IUTEST_PP_DISALLOW_ASSIGN(AnyMatcher);
};

/**
* @brief Anything matcher
*/
class AnythingMatcher : public IMatcher
{
public:
AnythingMatcher(void) {}
public:
template<typename U>
AssertionResult operator ()(const U& actual) const
{
return AssertionSuccess();
}

public:
::std::string WitchIs(void) const IUTEST_CXX_OVERRIDE
{
return "_";
}
private:
IUTEST_PP_DISALLOW_ASSIGN(AnythingMatcher);
};

#if IUTEST_HAS_MATCHER_ALLOF_AND_ANYOF

/**
Expand Down Expand Up @@ -1271,139 +1329,171 @@ namespace matchers
{

/**
* @ingroup MATCHERS
* @brief Make Equals matcher
*/
template<typename T>
detail::EqMatcher<T> Equals(const T& expected) { return detail::EqMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Eq matcher
*/
template<typename T>
detail::EqMatcher<T> Eq(const T& expected) { return detail::EqMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Ne matcher
*/
template<typename T>
detail::NeMatcher<T> Ne(const T& expected) { return detail::NeMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Le matcher
*/
template<typename T>
detail::LeMatcher<T> Le(const T& expected) { return detail::LeMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Lt matcher
*/
template<typename T>
detail::LtMatcher<T> Lt(const T& expected) { return detail::LtMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Ge matcher
*/
template<typename T>
detail::GeMatcher<T> Ge(const T& expected) { return detail::GeMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Gt matcher
*/
template<typename T>
detail::GtMatcher<T> Gt(const T& expected) { return detail::GtMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make IsNull matcher
*/
inline detail::IsNullMatcher IsNull() { return detail::IsNullMatcher(); }

/**
* @ingroup MATCHERS
* @brief Make NotNull matcher
*/
inline detail::NotNullMatcher NotNull() { return detail::NotNullMatcher(); }

/**
* @ingroup MATCHERS
* @brief Make Float Eq matcher
* @details argument は expected とおよそ等しい
*/
inline detail::FloatingPointEqMatcher<float> FloatEq(float expected) { return detail::FloatingPointEqMatcher<float>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Double Eq matcher
* @details argument は expected とおよそ等しい
*/
inline detail::FloatingPointEqMatcher<double> DoubleEq(double expected) { return detail::FloatingPointEqMatcher<double>(expected); }

/**
* @ingroup MATCHERS
* @brief Make NanSensitive Float Eq matcher
* @details argument は expected とおよそ等しい(NaN 同士は等しいとされる)
*/
inline detail::NanSensitiveFloatingPointEqMatcher<float> NanSensitiveFloatEq(float expected) { return detail::NanSensitiveFloatingPointEqMatcher<float>(expected); }

/**
* @ingroup MATCHERS
* @brief Make NanSensitive Double Eq matcher
* @details argument は expected とおよそ等しい(NaN 同士は等しいとされる)
*/
inline detail::NanSensitiveFloatingPointEqMatcher<double> NanSensitiveDoubleEq(double expected) { return detail::NanSensitiveFloatingPointEqMatcher<double>(expected); }

/**
* @ingroup MATCHERS
* @brief Make StrEq matcher
*/
template<typename T>
detail::StrEqMatcher<T> StrEq(const T& expected) { return detail::StrEqMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make StrNe matcher
*/
template<typename T>
detail::StrNeMatcher<T> StrNe(const T& expected) { return detail::StrNeMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make StrCaseEq matcher
*/
template<typename T>
detail::StrCaseEqMatcher<T> StrCaseEq(const T& expected) { return detail::StrCaseEqMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make StrCaseNe matcher
*/
template<typename T>
detail::StrCaseNeMatcher<T> StrCaseNe(const T& expected) { return detail::StrCaseNeMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make StartsWith matcher
*/
template<typename T>
detail::StartsWithMatcher<const T&> StartsWith(const T& str) { return detail::StartsWithMatcher<const T&>(str); }

/**
* @ingroup MATCHERS
* @brief Make HasSubstr matcher
*/
template<typename T>
detail::HasSubstrMatcher<const T&> HasSubstr(const T& expected) { return detail::HasSubstrMatcher<const T&>(expected); }

/**
* @ingroup MATCHERS
* @brief Make EndsWith matcher
*/
template<typename T>
detail::EndsWithMatcher<const T&> EndsWith(const T& str) { return detail::EndsWithMatcher<const T&>(str); }

/**
* @ingroup MATCHERS
* @brief Make Contains matcher
* @details argument は expected にマッチする要素を含む
*/
template<typename T>
detail::ContainsMatcher<T> Contains(const T& expected) { return detail::ContainsMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Each matcher
* @details argument はすべての要素が expected にマッチする
*/
template<typename T>
detail::EachMatcher<T> Each(const T& expected) { return detail::EachMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make ElementsAreArray matcher
* @details argument はの各要素が a の要素とマッチする
*/
template<typename T>
detail::ElementsAreArrayMatcher<T> ElementsAreArray(const T& a) { return detail::ElementsAreArrayMatcher<T>(a); }

/**
* @ingroup MATCHERS
* @brief Make ElementsAreArray matcher
* @details argument はの要素 count 個が a の要素とマッチする
*/
template<typename T>
detail::ElementsAreArrayMatcher<T> ElementsAreArray(const T& a, int count) { return detail::ElementsAreArrayMatcher<T>(a, count); }
Expand All @@ -1413,6 +1503,7 @@ detail::ElementsAreArrayMatcher<T> ElementsAreArray(const T& a, int count) { ret
#if IUTEST_HAS_VARIADIC_TEMPLATES

/**
* @ingroup MATCHERS
* @brief Make ElementsAre matcher
*/
template<typename ...T>
Expand Down Expand Up @@ -1447,41 +1538,64 @@ IIUT_DECL_ELEMENTSARE(10)
#endif

/**
* @ingroup MATCHERS
* @brief Make Key matcher
* @details argument.first は expedted にマッチする
*/
template<typename T>
detail::KeyMatcher<T> Key(const T& expected) { return detail::KeyMatcher<T>(expected); }

/**
* @ingroup MATCHERS
* @brief Make Pair matcher
* @details argument.first は m1 にマッチし、arugment.second が m2 にマッチする
*/
template<typename T1, typename T2>
detail::PairMatcher<T1, T2> Pair(const T1& m1, const T2& m2) { return detail::PairMatcher<T1, T2>(m1, m2); }

/**
* @ingroup MATCHERS
* @brief Make Field matcher
* @details argument.*field は expedted にマッチする
*/
template<typename F, typename T>
detail::FieldMatcher<F, T> Field(const F& field, const T& expected) { return detail::FieldMatcher<F, T>(field, expected); }

/**
* @brief Make Field matcher
* @ingroup MATCHERS
* @brief Make Property matcher
* @details argument.*property() は expedted にマッチする
*/
template<typename P, typename T>
detail::PropertyMatcher<P, T> Property(const P& prop, const T& expected) { return detail::PropertyMatcher<P, T>(prop, expected); }

/**
* @ingroup MATCHERS
* @brief Make Any matcher
*/
template<typename T>
detail::AnyMatcher<T> A(void) { return detail::AnyMatcher<T>(); }


/**
* @ingroup MATCHERS
* @brief Anything matcher
*/
const detail::AnythingMatcher _;

#if IUTEST_HAS_MATCHER_ALLOF_AND_ANYOF

#if IUTEST_HAS_VARIADIC_TEMPLATES

/**
* @ingroup MATCHERS
* @brief Make AllOf matcher
*/
template<typename ...T>
detail::AllOfMatcher<T...> AllOf(const T&... m) { return detail::AllOfMatcher<T...>(m...); }

/**
* @ingroup MATCHERS
* @brief Make AnyOf matcher
*/
template<typename ...T>
Expand Down
Loading

0 comments on commit 325ae6b

Please sign in to comment.