diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2019-01-15 00:05:05 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2019-01-15 00:05:05 +0000 |
commit | f3126c8bc5cd24608698a2d28856691f346e03b6 (patch) | |
tree | 4f0b333293d004194d6b2551c1eacee491f97832 /libcxx/test | |
parent | bf59cb02c3db77ac1fa0b931bda32dfa44b3ab58 (diff) |
Generalize the comparison test structure to support cross-type comparisons. NFC to the library
llvm-svn: 351140
Diffstat (limited to 'libcxx/test')
-rw-r--r-- | libcxx/test/support/test_comparisons.h | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/libcxx/test/support/test_comparisons.h b/libcxx/test/support/test_comparisons.h index f67a84fa2b85..cf094eb65b82 100644 --- a/libcxx/test/support/test_comparisons.h +++ b/libcxx/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) { @@ -85,43 +85,43 @@ TEST_CONSTEXPR_CXX14 bool testComparisons6Values(Param val1, Param val2) 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; @@ -150,26 +150,26 @@ TEST_CONSTEXPR_CXX14 bool testComparisons2Values(Param val1, Param val2) 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 |