[libcxx] r351140 - Generalize the comparison test structure to support cross-type comparisons. NFC to the library
Marshall Clow
mclow.lists at gmail.com
Mon Jan 14 16:05:05 PST 2019
Author: marshall
Date: Mon Jan 14 16:05:05 2019
New Revision: 351140
URL: http://llvm.org/viewvc/llvm-project?rev=351140&view=rev
Log:
Generalize the comparison test structure to support cross-type comparisons. NFC to the library
Modified:
libcxx/trunk/test/support/test_comparisons.h
Modified: libcxx/trunk/test/support/test_comparisons.h
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/test_comparisons.h?rev=351140&r1=351139&r2=351140&view=diff
==============================================================================
--- libcxx/trunk/test/support/test_comparisons.h (original)
+++ libcxx/trunk/test/support/test_comparisons.h Mon Jan 14 16:05:05 2019
@@ -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)
{
@@ -85,43 +85,43 @@ TEST_CONSTEXPR_CXX14 bool testComparison
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 testComparison
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;
@@ -150,26 +150,26 @@ TEST_CONSTEXPR_CXX14 bool testComparison
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
More information about the libcxx-commits
mailing list