1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <array> 10 11 // bool operator==(array<T, N> const&, array<T, N> const&); 12 // bool operator!=(array<T, N> const&, array<T, N> const&); 13 // bool operator<(array<T, N> const&, array<T, N> const&); 14 // bool operator<=(array<T, N> const&, array<T, N> const&); 15 // bool operator>(array<T, N> const&, array<T, N> const&); 16 // bool operator>=(array<T, N> const&, array<T, N> const&); 17 18 19 #include <array> 20 #include <vector> 21 #include <cassert> 22 23 #include "test_macros.h" 24 25 template <class Array> 26 void test_compare(const Array& LHS, const Array& RHS) { 27 typedef std::vector<typename Array::value_type> Vector; 28 const Vector LHSV(LHS.begin(), LHS.end()); 29 const Vector RHSV(RHS.begin(), RHS.end()); 30 assert((LHS == RHS) == (LHSV == RHSV)); 31 assert((LHS != RHS) == (LHSV != RHSV)); 32 assert((LHS < RHS) == (LHSV < RHSV)); 33 assert((LHS <= RHS) == (LHSV <= RHSV)); 34 assert((LHS > RHS) == (LHSV > RHSV)); 35 assert((LHS >= RHS) == (LHSV >= RHSV)); 36 } 37 38 template <int Dummy> struct NoCompare {}; 39 40 int main(int, char**) 41 { 42 { 43 typedef NoCompare<0> T; 44 typedef std::array<T, 3> C; 45 C c1 = {{}}; 46 // expected-error@*:* 2 {{invalid operands to binary expression}} 47 TEST_IGNORE_NODISCARD (c1 == c1); 48 TEST_IGNORE_NODISCARD (c1 < c1); 49 } 50 { 51 typedef NoCompare<1> T; 52 typedef std::array<T, 3> C; 53 C c1 = {{}}; 54 // expected-error@*:* 2 {{invalid operands to binary expression}} 55 TEST_IGNORE_NODISCARD (c1 != c1); 56 TEST_IGNORE_NODISCARD (c1 > c1); 57 } 58 { 59 typedef NoCompare<2> T; 60 typedef std::array<T, 0> C; 61 C c1 = {{}}; 62 // expected-error@*:* 2 {{invalid operands to binary expression}} 63 TEST_IGNORE_NODISCARD (c1 == c1); 64 TEST_IGNORE_NODISCARD (c1 < c1); 65 } 66 67 return 0; 68 } 69