summaryrefslogtreecommitdiff
path: root/libcxx/test/std/containers/sequences/array/compare.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test/std/containers/sequences/array/compare.pass.cpp')
-rw-r--r--libcxx/test/std/containers/sequences/array/compare.pass.cpp103
1 files changed, 56 insertions, 47 deletions
diff --git a/libcxx/test/std/containers/sequences/array/compare.pass.cpp b/libcxx/test/std/containers/sequences/array/compare.pass.cpp
index 972600992980..f79a638c5688 100644
--- a/libcxx/test/std/containers/sequences/array/compare.pass.cpp
+++ b/libcxx/test/std/containers/sequences/array/compare.pass.cpp
@@ -8,13 +8,18 @@
// <array>
-// bool operator==(array<T, N> const&, array<T, N> const&); // constexpr in C++20
-// bool operator!=(array<T, N> const&, array<T, N> const&); // constexpr in C++20
-// bool operator<(array<T, N> const&, array<T, N> const&); // constexpr in C++20
-// bool operator<=(array<T, N> const&, array<T, N> const&); // constexpr in C++20
-// bool operator>(array<T, N> const&, array<T, N> const&); // constexpr in C++20
-// bool operator>=(array<T, N> const&, array<T, N> const&); // constexpr in C++20
-
+// template <class T, size_t N>
+// bool operator==(const array<T,N>& x, const array<T,N>& y); // constexpr in C++20
+// template <class T, size_t N>
+// bool operator!=(const array<T,N>& x, const array<T,N>& y); // removed in C++20
+// template <class T, size_t N>
+// bool operator<(const array<T,N>& x, const array<T,N>& y); // removed in C++20
+// template <class T, size_t N>
+// bool operator>(const array<T,N>& x, const array<T,N>& y); // removed in C++20
+// template <class T, size_t N>
+// bool operator<=(const array<T,N>& x, const array<T,N>& y); // removed in C++20
+// template <class T, size_t N>
+// bool operator>=(const array<T,N>& x, const array<T,N>& y); // removed in C++20
#include <array>
#include <cassert>
@@ -22,49 +27,53 @@
#include "test_macros.h"
#include "test_comparisons.h"
-TEST_CONSTEXPR_CXX20 bool tests()
-{
- {
- typedef std::array<int, 3> C;
- const C c1 = {1, 2, 3};
- const C c2 = {1, 2, 3};
- const C c3 = {3, 2, 1};
- const C c4 = {1, 2, 1};
- assert(testComparisons(c1, c2, true, false));
- assert(testComparisons(c1, c3, false, true));
- assert(testComparisons(c1, c4, false, false));
- }
- {
- typedef std::array<int, 0> C;
- const C c1 = {};
- const C c2 = {};
- assert(testComparisons(c1, c2, true, false));
- }
- {
- typedef std::array<LessAndEqComp, 3> C;
- const C c1 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(3)};
- const C c2 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(3)};
- const C c3 = {LessAndEqComp(3), LessAndEqComp(2), LessAndEqComp(1)};
- const C c4 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(1)};
- assert(testComparisons(c1, c2, true, false));
- assert(testComparisons(c1, c3, false, true));
- assert(testComparisons(c1, c4, false, false));
- }
- {
- typedef std::array<LessAndEqComp, 0> C;
- const C c1 = {};
- const C c2 = {};
- assert(testComparisons(c1, c2, true, false));
- }
+TEST_CONSTEXPR_CXX20 bool tests() {
+ // Arrays where the elements support all comparison operators
+ AssertComparisonsReturnBool<std::array<int, 3> >();
+ {
+ typedef std::array<int, 3> C;
+ const C c1 = {1, 2, 3};
+ const C c2 = {1, 2, 3};
+ const C c3 = {3, 2, 1};
+ const C c4 = {1, 2, 1};
+ assert(testComparisons(c1, c2, true, false));
+ assert(testComparisons(c1, c3, false, true));
+ assert(testComparisons(c1, c4, false, false));
+ }
+ // Empty array
+ {
+ typedef std::array<int, 0> C;
+ const C c1 = {};
+ const C c2 = {};
+ assert(testComparisons(c1, c2, true, false));
+ }
+ // Arrays where the elements support only less and equality comparisons
+ AssertComparisonsReturnBool<std::array<LessAndEqComp, 3> >();
+ {
+ typedef std::array<LessAndEqComp, 3> C;
+ const C c1 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(3)};
+ const C c2 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(3)};
+ const C c3 = {LessAndEqComp(3), LessAndEqComp(2), LessAndEqComp(1)};
+ const C c4 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(1)};
+ assert(testComparisons(c1, c2, true, false));
+ assert(testComparisons(c1, c3, false, true));
+ assert(testComparisons(c1, c4, false, false));
+ }
+ // Empty array where the elements support only less and equality comparisons
+ {
+ typedef std::array<LessAndEqComp, 0> C;
+ const C c1 = {};
+ const C c2 = {};
+ assert(testComparisons(c1, c2, true, false));
+ }
- return true;
+ return true;
}
-int main(int, char**)
-{
- tests();
+int main(int, char**) {
+ tests();
#if TEST_STD_VER >= 20
- static_assert(tests(), "");
+ static_assert(tests());
#endif
- return 0;
+ return 0;
}