159cdf90aSEric Fiselier //===----------------------------------------------------------------------===//
259cdf90aSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
659cdf90aSEric Fiselier //
759cdf90aSEric Fiselier //===----------------------------------------------------------------------===//
859cdf90aSEric Fiselier 
959cdf90aSEric Fiselier // <array>
1059cdf90aSEric Fiselier 
1177b9abfcSLouis Dionne // bool operator==(array<T, N> const&, array<T, N> const&);   // constexpr in C++20
1277b9abfcSLouis Dionne // bool operator!=(array<T, N> const&, array<T, N> const&);   // constexpr in C++20
1377b9abfcSLouis Dionne // bool operator<(array<T, N> const&, array<T, N> const&);    // constexpr in C++20
1477b9abfcSLouis Dionne // bool operator<=(array<T, N> const&, array<T, N> const&);   // constexpr in C++20
1577b9abfcSLouis Dionne // bool operator>(array<T, N> const&, array<T, N> const&);    // constexpr in C++20
1677b9abfcSLouis Dionne // bool operator>=(array<T, N> const&, array<T, N> const&);   // constexpr in C++20
1759cdf90aSEric Fiselier 
1859cdf90aSEric Fiselier 
1959cdf90aSEric Fiselier #include <array>
2059cdf90aSEric Fiselier #include <cassert>
2159cdf90aSEric Fiselier 
2259cdf90aSEric Fiselier #include "test_macros.h"
237c84e381SMarshall Clow #include "test_comparisons.h"
2459cdf90aSEric Fiselier 
tests()2577b9abfcSLouis Dionne TEST_CONSTEXPR_CXX20 bool tests()
2659cdf90aSEric Fiselier {
2759cdf90aSEric Fiselier     {
2877b9abfcSLouis Dionne         typedef std::array<int, 3> C;
29d7ac595fSKonstantin Boyarinov         const C c1 = {1, 2, 3};
30d7ac595fSKonstantin Boyarinov         const C c2 = {1, 2, 3};
31d7ac595fSKonstantin Boyarinov         const C c3 = {3, 2, 1};
32d7ac595fSKonstantin Boyarinov         const C c4 = {1, 2, 1};
33*984f5f3fSMark de Wever         assert(testComparisons(c1, c2, true, false));
34*984f5f3fSMark de Wever         assert(testComparisons(c1, c3, false, true));
35*984f5f3fSMark de Wever         assert(testComparisons(c1, c4, false, false));
3659cdf90aSEric Fiselier     }
3759cdf90aSEric Fiselier     {
3877b9abfcSLouis Dionne         typedef std::array<int, 0> C;
39d7ac595fSKonstantin Boyarinov         const C c1 = {};
40d7ac595fSKonstantin Boyarinov         const C c2 = {};
41*984f5f3fSMark de Wever         assert(testComparisons(c1, c2, true, false));
42d7ac595fSKonstantin Boyarinov     }
43d7ac595fSKonstantin Boyarinov     {
44d7ac595fSKonstantin Boyarinov         typedef std::array<LessAndEqComp, 3> C;
45d7ac595fSKonstantin Boyarinov         const C c1 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(3)};
46d7ac595fSKonstantin Boyarinov         const C c2 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(3)};
47d7ac595fSKonstantin Boyarinov         const C c3 = {LessAndEqComp(3), LessAndEqComp(2), LessAndEqComp(1)};
48d7ac595fSKonstantin Boyarinov         const C c4 = {LessAndEqComp(1), LessAndEqComp(2), LessAndEqComp(1)};
49*984f5f3fSMark de Wever         assert(testComparisons(c1, c2, true, false));
50*984f5f3fSMark de Wever         assert(testComparisons(c1, c3, false, true));
51*984f5f3fSMark de Wever         assert(testComparisons(c1, c4, false, false));
52d7ac595fSKonstantin Boyarinov     }
53d7ac595fSKonstantin Boyarinov     {
54d7ac595fSKonstantin Boyarinov         typedef std::array<LessAndEqComp, 0> C;
55d7ac595fSKonstantin Boyarinov         const C c1 = {};
56d7ac595fSKonstantin Boyarinov         const C c2 = {};
57*984f5f3fSMark de Wever         assert(testComparisons(c1, c2, true, false));
5859cdf90aSEric Fiselier     }
5907d8ac0aSMarshall Clow 
6077b9abfcSLouis Dionne     return true;
6107d8ac0aSMarshall Clow }
622df59c50SJF Bastien 
main(int,char **)6377b9abfcSLouis Dionne int main(int, char**)
6477b9abfcSLouis Dionne {
6577b9abfcSLouis Dionne     tests();
6677b9abfcSLouis Dionne #if TEST_STD_VER >= 20
6777b9abfcSLouis Dionne     static_assert(tests(), "");
6877b9abfcSLouis Dionne #endif
692df59c50SJF Bastien     return 0;
7059cdf90aSEric Fiselier }
71