summaryrefslogtreecommitdiff
path: root/test/support/test_comparisons.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/support/test_comparisons.h')
-rw-r--r--test/support/test_comparisons.h80
1 files changed, 40 insertions, 40 deletions
diff --git a/test/support/test_comparisons.h b/test/support/test_comparisons.h
index a3f8dd9f8c35..cf094eb65b82 100644
--- a/test/support/test_comparisons.h
+++ b/test/support/test_comparisons.h
@@ -23,8 +23,8 @@
#include "test_macros.h"
// Test all six comparison operations for sanity
-template <class T>
-TEST_CONSTEXPR_CXX14 bool testComparisons6(const T& t1, const T& t2, bool isEqual, bool isLess)
+template <class T, class U = T>
+TEST_CONSTEXPR_CXX14 bool testComparisons6(const T& t1, const U& t2, bool isEqual, bool isLess)
{
if (isEqual)
{
@@ -81,47 +81,47 @@ TEST_CONSTEXPR_CXX14 bool testComparisons6Values(Param val1, Param val2)
{
const bool isEqual = val1 == val2;
const bool isLess = val1 < val2;
-
- return testComparisons6(T{val1}, T{val2}, isEqual, isLess);
+
+ return testComparisons6(T(val1), T(val2), isEqual, isLess);
}
-template <class T>
+template <class T, class U = T>
void AssertComparisons6AreNoexcept()
{
- ASSERT_NOEXCEPT(std::declval<const T&>() == std::declval<const T&>());
- ASSERT_NOEXCEPT(std::declval<const T&>() != std::declval<const T&>());
- ASSERT_NOEXCEPT(std::declval<const T&>() < std::declval<const T&>());
- ASSERT_NOEXCEPT(std::declval<const T&>() <= std::declval<const T&>());
- ASSERT_NOEXCEPT(std::declval<const T&>() > std::declval<const T&>());
- ASSERT_NOEXCEPT(std::declval<const T&>() >= std::declval<const T&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() == std::declval<const U&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() != std::declval<const U&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() < std::declval<const U&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() <= std::declval<const U&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() > std::declval<const U&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() >= std::declval<const U&>());
}
-template <class T>
+template <class T, class U = T>
void AssertComparisons6ReturnBool()
{
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() == std::declval<const T&>()), bool);
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() != std::declval<const T&>()), bool);
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() < std::declval<const T&>()), bool);
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() <= std::declval<const T&>()), bool);
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() > std::declval<const T&>()), bool);
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() >= std::declval<const T&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() == std::declval<const U&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() != std::declval<const U&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() < std::declval<const U&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() <= std::declval<const U&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() > std::declval<const U&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() >= std::declval<const U&>()), bool);
}
-template <class T>
+template <class T, class U = T>
void AssertComparisons6ConvertibleToBool()
{
- static_assert((std::is_convertible<decltype(std::declval<const T&>() == std::declval<const T&>()), bool>::value), "");
- static_assert((std::is_convertible<decltype(std::declval<const T&>() != std::declval<const T&>()), bool>::value), "");
- static_assert((std::is_convertible<decltype(std::declval<const T&>() < std::declval<const T&>()), bool>::value), "");
- static_assert((std::is_convertible<decltype(std::declval<const T&>() <= std::declval<const T&>()), bool>::value), "");
- static_assert((std::is_convertible<decltype(std::declval<const T&>() > std::declval<const T&>()), bool>::value), "");
- static_assert((std::is_convertible<decltype(std::declval<const T&>() >= std::declval<const T&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() == std::declval<const U&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() != std::declval<const U&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() < std::declval<const U&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() <= std::declval<const U&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() > std::declval<const U&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() >= std::declval<const U&>()), bool>::value), "");
}
-// Test all six comparison operations for sanity
-template <class T>
-TEST_CONSTEXPR_CXX14 bool testComparisons2(const T& t1, const T& t2, bool isEqual)
+// Test all two comparison operations for sanity
+template <class T, class U = T>
+TEST_CONSTEXPR_CXX14 bool testComparisons2(const T& t1, const U& t2, bool isEqual)
{
if (isEqual)
{
@@ -130,7 +130,7 @@ TEST_CONSTEXPR_CXX14 bool testComparisons2(const T& t1, const T& t2, bool isEqua
if ( (t1 != t2)) return false;
if ( (t2 != t1)) return false;
}
- else /* greater */
+ else /* not equal */
{
if ( (t1 == t2)) return false;
if ( (t2 == t1)) return false;
@@ -146,30 +146,30 @@ template <class T, class Param>
TEST_CONSTEXPR_CXX14 bool testComparisons2Values(Param val1, Param val2)
{
const bool isEqual = val1 == val2;
-
- return testComparisons2(T{val1}, T{val2}, isEqual);
+
+ return testComparisons2(T(val1), T(val2), isEqual);
}
-template <class T>
+template <class T, class U = T>
void AssertComparisons2AreNoexcept()
{
- ASSERT_NOEXCEPT(std::declval<const T&>() == std::declval<const T&>());
- ASSERT_NOEXCEPT(std::declval<const T&>() != std::declval<const T&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() == std::declval<const U&>());
+ ASSERT_NOEXCEPT(std::declval<const T&>() != std::declval<const U&>());
}
-template <class T>
+template <class T, class U = T>
void AssertComparisons2ReturnBool()
{
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() == std::declval<const T&>()), bool);
- ASSERT_SAME_TYPE(decltype(std::declval<const T&>() != std::declval<const T&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() == std::declval<const U&>()), bool);
+ ASSERT_SAME_TYPE(decltype(std::declval<const T&>() != std::declval<const U&>()), bool);
}
-template <class T>
+template <class T, class U = T>
void AssertComparisons2ConvertibleToBool()
{
- static_assert((std::is_convertible<decltype(std::declval<const T&>() == std::declval<const T&>()), bool>::value), "");
- static_assert((std::is_convertible<decltype(std::declval<const T&>() != std::declval<const T&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() == std::declval<const U&>()), bool>::value), "");
+ static_assert((std::is_convertible<decltype(std::declval<const T&>() != std::declval<const U&>()), bool>::value), "");
}
#endif // TEST_COMPARISONS_H