Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ALMOST_EQ assertion #245

Merged
merged 15 commits into from Jun 28, 2019
28 changes: 16 additions & 12 deletions include/gtest/switch/iutest_switch_assert.hpp
Expand Up @@ -60,15 +60,15 @@

//======================================================================
// define
#define ASSERT_TRUE IUTEST_ASSERT_TRUE
#define ASSERT_FALSE IUTEST_ASSERT_FALSE
#define ASSERT_EQ IUTEST_ASSERT_EQ
#define ASSERT_NE IUTEST_ASSERT_NE
#define ASSERT_LT IUTEST_ASSERT_LT
#define ASSERT_LE IUTEST_ASSERT_LE
#define ASSERT_GT IUTEST_ASSERT_GT
#define ASSERT_GE IUTEST_ASSERT_GE
#define ASSERT_NEAR IUTEST_ASSERT_NEAR
#define ASSERT_TRUE IUTEST_ASSERT_TRUE
#define ASSERT_FALSE IUTEST_ASSERT_FALSE
#define ASSERT_EQ IUTEST_ASSERT_EQ
#define ASSERT_NE IUTEST_ASSERT_NE
#define ASSERT_LT IUTEST_ASSERT_LT
#define ASSERT_LE IUTEST_ASSERT_LE
#define ASSERT_GT IUTEST_ASSERT_GT
#define ASSERT_GE IUTEST_ASSERT_GE
#define ASSERT_NEAR IUTEST_ASSERT_NEAR
#define ASSERT_FLOAT_EQ IUTEST_ASSERT_FLOAT_EQ
#define ASSERT_DOUBLE_EQ IUTEST_ASSERT_DOUBLE_EQ
#define ASSERT_STREQ IUTEST_ASSERT_STREQ
Expand Down Expand Up @@ -113,6 +113,7 @@
#undef IUTEST_ASSERT_TRUE
#undef IUTEST_ASSERT_FALSE
#undef IUTEST_ASSERT_EQ
#undef IUTEST_ASSERT_ALMOST_EQ
#undef IUTEST_ASSERT_NE
#undef IUTEST_ASSERT_LT
#undef IUTEST_ASSERT_LE
Expand Down Expand Up @@ -161,6 +162,8 @@
#define IUTEST_ASSERT_TRUE(...) ASSERT_TRUE(!!(__VA_ARGS__))
#define IUTEST_ASSERT_FALSE(...) ASSERT_FALSE((__VA_ARGS__))
#define IUTEST_ASSERT_EQ ASSERT_EQ
#define IUTEST_ASSERT_ALMOST_EQ(expected, actual) \
ASSERT_PRED_FORMAT2( ::testing::internal::backward::AlmostEqHelper<IUTEST_IS_NULLLITERAL(expected)>::Compare, expected, actual)
#define IUTEST_ASSERT_NE(expected, actual) ASSERT_PRED_FORMAT2(IIUT_COMPATIBLE_NEHELPER(expected)::Compare, expected, actual)
#define IUTEST_ASSERT_LT ASSERT_LT
#define IUTEST_ASSERT_LE ASSERT_LE
Expand Down Expand Up @@ -206,8 +209,9 @@

#endif // !defined(IUTEST_USE_GTEST)

#define ASSERT_NULL IUTEST_ASSERT_NULL
#define ASSERT_NOTNULL IUTEST_ASSERT_NOTNULL
#define ASSERT_SAME IUTEST_ASSERT_SAME
#define ASSERT_ALMOST_EQ IUTEST_ASSERT_ALMOST_EQ
#define ASSERT_NULL IUTEST_ASSERT_NULL
#define ASSERT_NOTNULL IUTEST_ASSERT_NOTNULL
#define ASSERT_SAME IUTEST_ASSERT_SAME

#endif // INCG_IRIS_IUTEST_SWITCH_ASSERT_HPP_F4AD6E1B_4B1F_40EE_A0CC_D454587B2C39_
28 changes: 16 additions & 12 deletions include/gtest/switch/iutest_switch_assume.hpp
Expand Up @@ -19,15 +19,15 @@

//======================================================================
// define
#define ASSUME_TRUE IUTEST_ASSUME_TRUE
#define ASSUME_FALSE IUTEST_ASSUME_FALSE
#define ASSUME_EQ IUTEST_ASSUME_EQ
#define ASSUME_NE IUTEST_ASSUME_NE
#define ASSUME_LT IUTEST_ASSUME_LT
#define ASSUME_LE IUTEST_ASSUME_LE
#define ASSUME_GT IUTEST_ASSUME_GT
#define ASSUME_GE IUTEST_ASSUME_GE
#define ASSUME_NEAR IUTEST_ASSUME_NEAR
#define ASSUME_TRUE IUTEST_ASSUME_TRUE
#define ASSUME_FALSE IUTEST_ASSUME_FALSE
#define ASSUME_EQ IUTEST_ASSUME_EQ
#define ASSUME_NE IUTEST_ASSUME_NE
#define ASSUME_LT IUTEST_ASSUME_LT
#define ASSUME_LE IUTEST_ASSUME_LE
#define ASSUME_GT IUTEST_ASSUME_GT
#define ASSUME_GE IUTEST_ASSUME_GE
#define ASSUME_NEAR IUTEST_ASSUME_NEAR
#define ASSUME_FLOAT_EQ IUTEST_ASSUME_FLOAT_EQ
#define ASSUME_DOUBLE_EQ IUTEST_ASSUME_DOUBLE_EQ
#define ASSUME_STREQ IUTEST_ASSUME_STREQ
Expand Down Expand Up @@ -72,6 +72,7 @@
#undef IUTEST_ASSUME_TRUE
#undef IUTEST_ASSUME_FALSE
#undef IUTEST_ASSUME_EQ
#undef IUTEST_ASSUME_ALMOST_EQ
#undef IUTEST_ASSUME_NE
#undef IUTEST_ASSUME_LT
#undef IUTEST_ASSUME_LE
Expand Down Expand Up @@ -193,6 +194,8 @@
#define IUTEST_ASSUME_TRUE(...) ASSUME_TRUE(!!(__VA_ARGS__))
#define IUTEST_ASSUME_FALSE(...) ASSUME_FALSE((__VA_ARGS__))
#define IUTEST_ASSUME_EQ ASSUME_EQ
#define IUTEST_ASSUME_ALMOST_EQ(expected, actual) \
ASSUME_PRED_FORMAT2( ::testing::internal::backward::AlmostEqHelper<IUTEST_IS_NULLLITERAL(expected)>::Compare, expected, actual)
#define IUTEST_ASSUME_NE(expected, actual) ASSUME_PRED_FORMAT2(IIUT_COMPATIBLE_NEHELPER(expected)::Compare, expected, actual)
#define IUTEST_ASSUME_LT ASSUME_LT
#define IUTEST_ASSUME_LE ASSUME_LE
Expand Down Expand Up @@ -239,8 +242,9 @@

#endif // !defined(IUTEST_USE_GTEST)

#define ASSUME_NULL IUTEST_ASSUME_NULL
#define ASSUME_NOTNULL IUTEST_ASSUME_NOTNULL
#define ASSUME_SAME IUTEST_ASSUME_SAME
#define ASSUME_ALMOST_EQ IUTEST_ASSUME_ALMOST_EQ
#define ASSUME_NULL IUTEST_ASSUME_NULL
#define ASSUME_NOTNULL IUTEST_ASSUME_NOTNULL
#define ASSUME_SAME IUTEST_ASSUME_SAME

#endif // INCG_IRIS_IUTEST_SWITCH_ASSUME_HPP_E22A3162_D581_4F4F_A344_F5D701B21F53_
40 changes: 33 additions & 7 deletions include/gtest/switch/iutest_switch_cmphelper.hpp
Expand Up @@ -45,20 +45,20 @@ namespace backward

#if defined(GTEST_IS_NULL_LITERAL_)

template <bool lhs_is_null_literal>
template<bool lhs_is_null_literal>
class EqHelper : public internal::EqHelper<lhs_is_null_literal> {};

#else

template <bool lhs_is_null_literal>
template<bool lhs_is_null_literal>
class EqHelper : public internal::EqHelper {};

#endif

template <bool lhs_is_null_literal>
template<bool lhs_is_null_literal>
class NeHelper {
public:
template <typename T1, typename T2>
template<typename T1, typename T2>
static AssertionResult Compare(const char* expected_expression,
const char* actual_expression,
const T1& expected,
Expand All @@ -76,10 +76,10 @@ class NeHelper {
}
};

template <>
template<>
class NeHelper<true> {
public:
template <typename T1, typename T2>
template<typename T1, typename T2>
static AssertionResult Compare(
const char* expected_expression,
const char* actual_expression,
Expand All @@ -90,7 +90,7 @@ class NeHelper<true> {
actual);
}

template <typename T>
template<typename T>
static AssertionResult Compare(
const char* expected_expression,
const char* actual_expression,
Expand All @@ -101,6 +101,32 @@ class NeHelper<true> {
}
};

template<bool lhs_is_null_literal>
class AlmostEqHelper : public internal::EqHelper<lhs_is_null_literal>
{
public:
template<typename T1, typename T2>
static AssertionResult Compare(const char* expr1, const char* expr2, const T1& val1, const T2& val2)
{
return EqHelper<false>::Compare(expr1, expr2, val1, (T1)val2);
}
template<typename T>
static AssertionResult Compare(const char* expr1, const char* expr2, const float& val1, const T& val2)
{
return CmpHelperFloatingPointEQ<float>(expr1, expr2, val1, (float)val2);
}
template<typename T>
static AssertionResult Compare(const char* expr1, const char* expr2, const double& val1, const T& val2)
{
return CmpHelperFloatingPointEQ<double>(expr1, expr2, val1, (double)val2);
}
};

template<>
class AlmostEqHelper<true> : public internal::EqHelper<true>
{
};

} // end of namespace backward

//======================================================================
Expand Down
28 changes: 16 additions & 12 deletions include/gtest/switch/iutest_switch_expect.hpp
Expand Up @@ -60,15 +60,15 @@

//======================================================================
// define
#define EXPECT_TRUE IUTEST_EXPECT_TRUE
#define EXPECT_FALSE IUTEST_EXPECT_FALSE
#define EXPECT_EQ IUTEST_EXPECT_EQ
#define EXPECT_NE IUTEST_EXPECT_NE
#define EXPECT_LT IUTEST_EXPECT_LT
#define EXPECT_LE IUTEST_EXPECT_LE
#define EXPECT_GT IUTEST_EXPECT_GT
#define EXPECT_GE IUTEST_EXPECT_GE
#define EXPECT_NEAR IUTEST_EXPECT_NEAR
#define EXPECT_TRUE IUTEST_EXPECT_TRUE
#define EXPECT_FALSE IUTEST_EXPECT_FALSE
#define EXPECT_EQ IUTEST_EXPECT_EQ
#define EXPECT_NE IUTEST_EXPECT_NE
#define EXPECT_LT IUTEST_EXPECT_LT
#define EXPECT_LE IUTEST_EXPECT_LE
#define EXPECT_GT IUTEST_EXPECT_GT
#define EXPECT_GE IUTEST_EXPECT_GE
#define EXPECT_NEAR IUTEST_EXPECT_NEAR
#define EXPECT_FLOAT_EQ IUTEST_EXPECT_FLOAT_EQ
#define EXPECT_DOUBLE_EQ IUTEST_EXPECT_DOUBLE_EQ
#define EXPECT_STREQ IUTEST_EXPECT_STREQ
Expand Down Expand Up @@ -113,6 +113,7 @@
#undef IUTEST_EXPECT_TRUE
#undef IUTEST_EXPECT_FALSE
#undef IUTEST_EXPECT_EQ
#undef IUTEST_EXPECT_ALMOST_EQ
#undef IUTEST_EXPECT_NE
#undef IUTEST_EXPECT_LT
#undef IUTEST_EXPECT_LE
Expand Down Expand Up @@ -162,6 +163,8 @@
#define IUTEST_EXPECT_TRUE(...) EXPECT_TRUE(!!(__VA_ARGS__))
#define IUTEST_EXPECT_FALSE(...) EXPECT_FALSE((__VA_ARGS__))
#define IUTEST_EXPECT_EQ EXPECT_EQ
#define IUTEST_EXPECT_ALMOST_EQ(expected, actual) \
EXPECT_PRED_FORMAT2( ::testing::internal::backward::AlmostEqHelper<IUTEST_IS_NULLLITERAL(expected)>::Compare, expected, actual)
#define IUTEST_EXPECT_NE(expected, actual) EXPECT_PRED_FORMAT2(IIUT_COMPATIBLE_NEHELPER(expected)::Compare, expected, actual)
#define IUTEST_EXPECT_LT EXPECT_LT
#define IUTEST_EXPECT_LE EXPECT_LE
Expand Down Expand Up @@ -206,8 +209,9 @@

#endif // !defined(IUTEST_USE_GTEST)

#define EXPECT_NULL IUTEST_EXPECT_NULL
#define EXPECT_NOTNULL IUTEST_EXPECT_NOTNULL
#define EXPECT_SAME IUTEST_EXPECT_SAME
#define EXPECT_ALMOST_EQ IUTEST_EXPECT_ALMOST_EQ
#define EXPECT_NULL IUTEST_EXPECT_NULL
#define EXPECT_NOTNULL IUTEST_EXPECT_NOTNULL
#define EXPECT_SAME IUTEST_EXPECT_SAME

#endif // INCG_IRIS_IUTEST_SWITCH_EXPECT_HPP_F4AD6E1B_4B1F_40EE_A0CC_D454587B2C39_
28 changes: 16 additions & 12 deletions include/gtest/switch/iutest_switch_inform.hpp
Expand Up @@ -19,15 +19,15 @@

//======================================================================
// define
#define INFORM_TRUE IUTEST_INFORM_TRUE
#define INFORM_FALSE IUTEST_INFORM_FALSE
#define INFORM_EQ IUTEST_INFORM_EQ
#define INFORM_NE IUTEST_INFORM_NE
#define INFORM_LT IUTEST_INFORM_LT
#define INFORM_LE IUTEST_INFORM_LE
#define INFORM_GT IUTEST_INFORM_GT
#define INFORM_GE IUTEST_INFORM_GE
#define INFORM_NEAR IUTEST_INFORM_NEAR
#define INFORM_TRUE IUTEST_INFORM_TRUE
#define INFORM_FALSE IUTEST_INFORM_FALSE
#define INFORM_EQ IUTEST_INFORM_EQ
#define INFORM_NE IUTEST_INFORM_NE
#define INFORM_LT IUTEST_INFORM_LT
#define INFORM_LE IUTEST_INFORM_LE
#define INFORM_GT IUTEST_INFORM_GT
#define INFORM_GE IUTEST_INFORM_GE
#define INFORM_NEAR IUTEST_INFORM_NEAR
#define INFORM_FLOAT_EQ IUTEST_INFORM_FLOAT_EQ
#define INFORM_DOUBLE_EQ IUTEST_INFORM_DOUBLE_EQ
#define INFORM_STREQ IUTEST_INFORM_STREQ
Expand Down Expand Up @@ -72,6 +72,7 @@
#undef IUTEST_INFORM_TRUE
#undef IUTEST_INFORM_FALSE
#undef IUTEST_INFORM_EQ
#undef IUTEST_INFORM_ALMOST_EQ
#undef IUTEST_INFORM_NE
#undef IUTEST_INFORM_LT
#undef IUTEST_INFORM_LE
Expand Down Expand Up @@ -200,6 +201,8 @@
#define IUTEST_INFORM_TRUE(...) INFORM_TRUE(!!(__VA_ARGS__))
#define IUTEST_INFORM_FALSE(...) INFORM_FALSE((__VA_ARGS__))
#define IUTEST_INFORM_EQ INFORM_EQ
#define IUTEST_INFORM_ALMOST_EQ(expected, actual) \
INFORM_PRED_FORMAT2( ::testing::internal::backward::AlmostEqHelper<IUTEST_IS_NULLLITERAL(expected)>::Compare, expected, actual)
#define IUTEST_INFORM_NE(expected, actual) INFORM_PRED_FORMAT2(IIUT_COMPATIBLE_NEHELPER(expected)::Compare, expected, actual)
#define IUTEST_INFORM_LT INFORM_LT
#define IUTEST_INFORM_LE INFORM_LE
Expand Down Expand Up @@ -284,8 +287,9 @@ inline void AppendInformSupportPrinter()

#endif // !defined(IUTEST_USE_GTEST)

#define INFORM_NULL IUTEST_INFORM_NULL
#define INFORM_NOTNULL IUTEST_INFORM_NOTNULL
#define INFORM_SAME IUTEST_INFORM_SAME
#define INFORM_ALMOST_EQ IUTEST_INFORM_ALMOST_EQ
#define INFORM_NULL IUTEST_INFORM_NULL
#define INFORM_NOTNULL IUTEST_INFORM_NOTNULL
#define INFORM_SAME IUTEST_INFORM_SAME

#endif // INCG_IRIS_IUTEST_SWITCH_INFORM_HPP_F4AD6E1B_4B1F_40EE_A0CC_D454587B2C39_
8 changes: 8 additions & 0 deletions include/internal/iutest_compatible_defs.hpp
Expand Up @@ -33,6 +33,14 @@ struct IsNullLiteralHelper
static char (&IsNullLiteral(...))[2];
};

template<typename RawType>
union FloatingPointUnion
{
typedef typename ::iutest::detail::TypeWithSize<sizeof(RawType)>::UInt BitType;
RawType fv;
BitType uv;
};

} // end of namespace iutest_compatible

#endif // INCG_IRIS_IUTEST_COMPATIBLE_DEFS_HPP_9BCFF3D0_A045_4B94_B51F_4C6E88D8654C_
4 changes: 4 additions & 0 deletions include/internal/iutest_internal.hpp
Expand Up @@ -483,6 +483,10 @@
IUTEST_PRED_FORMAT2_( ::iutest::internal::backward::EqHelper<IUTEST_IS_NULLLITERAL(expected)>::Compare \
, expected, actual, on_failure )

#define IUTEST_TEST_ALMOST_EQ(expected, actual, on_failure) \
IUTEST_PRED_FORMAT2_( ::iutest::internal::backward::AlmostEqHelper<IUTEST_IS_NULLLITERAL(expected)>::Compare \
, expected, actual, on_failure )

#define IUTEST_TEST_NE(v1, v2, on_failure) \
IUTEST_PRED_FORMAT2_( ::iutest::internal::backward::NeHelper<IUTEST_IS_NULLLITERAL(v1)>::Compare \
, v1, v2, on_failure )
Expand Down
4 changes: 4 additions & 0 deletions include/internal/iutest_stdlib.hpp
Expand Up @@ -862,6 +862,10 @@ struct type_fit_t<16>
#endif
};

// comaptible
srz-zumix marked this conversation as resolved.
Show resolved Hide resolved
template<size_t SIZE>
struct TypeWithSize : public type_fit_t<SIZE> {};

//======================================================================
// function
/**
Expand Down