[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