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// <tuple>
10
11// template <class... Types> class tuple;
12
13// template<class... TTypes, class... UTypes>
14// bool
15// operator==(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
16
17// UNSUPPORTED: c++03
18
19#include <tuple>
20#include <string>
21#include <cassert>
22
23#include "test_macros.h"
24
25int main(int, char**)
26{
27 {
28 typedef std::tuple<> T1;
29 typedef std::tuple<> T2;
30 const T1 t1;
31 const T2 t2;
32 assert(t1 == t2);
33 assert(!(t1 != t2));
34 }
35 {
36 typedef std::tuple<int> T1;
37 typedef std::tuple<double> T2;
38 const T1 t1(1);
39 const T2 t2(1.1);
40 assert(!(t1 == t2));
41 assert(t1 != t2);
42 }
43 {
44 typedef std::tuple<int> T1;
45 typedef std::tuple<double> T2;
46 const T1 t1(1);
47 const T2 t2(1);
48 assert(t1 == t2);
49 assert(!(t1 != t2));
50 }
51 {
52 typedef std::tuple<int, double> T1;
53 typedef std::tuple<double, long> T2;
54 const T1 t1(1, 2);
55 const T2 t2(1, 2);
56 assert(t1 == t2);
57 assert(!(t1 != t2));
58 }
59 {
60 typedef std::tuple<int, double> T1;
61 typedef std::tuple<double, long> T2;
62 const T1 t1(1, 2);
63 const T2 t2(1, 3);
64 assert(!(t1 == t2));
65 assert(t1 != t2);
66 }
67 {
68 typedef std::tuple<int, double> T1;
69 typedef std::tuple<double, long> T2;
70 const T1 t1(1, 2);
71 const T2 t2(1.1, 2);
72 assert(!(t1 == t2));
73 assert(t1 != t2);
74 }
75 {
76 typedef std::tuple<int, double> T1;
77 typedef std::tuple<double, long> T2;
78 const T1 t1(1, 2);
79 const T2 t2(1.1, 3);
80 assert(!(t1 == t2));
81 assert(t1 != t2);
82 }
83 {
84 typedef std::tuple<long, int, double> T1;
85 typedef std::tuple<double, long, int> T2;
86 const T1 t1(1, 2, 3);
87 const T2 t2(1, 2, 3);
88 assert(t1 == t2);
89 assert(!(t1 != t2));
90 }
91 {
92 typedef std::tuple<long, int, double> T1;
93 typedef std::tuple<double, long, int> T2;
94 const T1 t1(1, 2, 3);
95 const T2 t2(1.1, 2, 3);
96 assert(!(t1 == t2));
97 assert(t1 != t2);
98 }
99 {
100 typedef std::tuple<long, int, double> T1;
101 typedef std::tuple<double, long, int> T2;
102 const T1 t1(1, 2, 3);
103 const T2 t2(1, 3, 3);
104 assert(!(t1 == t2));
105 assert(t1 != t2);
106 }
107 {
108 typedef std::tuple<long, int, double> T1;
109 typedef std::tuple<double, long, int> T2;
110 const T1 t1(1, 2, 3);
111 const T2 t2(1, 2, 4);
112 assert(!(t1 == t2));
113 assert(t1 != t2);
114 }
115 {
116 typedef std::tuple<long, int, double> T1;
117 typedef std::tuple<double, long, int> T2;
118 const T1 t1(1, 2, 3);
119 const T2 t2(1, 3, 2);
120 assert(!(t1 == t2));
121 assert(t1 != t2);
122 }
123 {
124 typedef std::tuple<long, int, double> T1;
125 typedef std::tuple<double, long, int> T2;
126 const T1 t1(1, 2, 3);
127 const T2 t2(1.1, 2, 2);
128 assert(!(t1 == t2));
129 assert(t1 != t2);
130 }
131 {
132 typedef std::tuple<long, int, double> T1;
133 typedef std::tuple<double, long, int> T2;
134 const T1 t1(1, 2, 3);
135 const T2 t2(1.1, 3, 3);
136 assert(!(t1 == t2));
137 assert(t1 != t2);
138 }
139 {
140 typedef std::tuple<long, int, double> T1;
141 typedef std::tuple<double, long, int> T2;
142 const T1 t1(1, 2, 3);
143 const T2 t2(1.1, 3, 2);
144 assert(!(t1 == t2));
145 assert(t1 != t2);
146 }
147#if TEST_STD_VER > 11
148 {
149 typedef std::tuple<long, int, double> T1;
150 typedef std::tuple<double, long, int> T2;
151 constexpr T1 t1(1, 2, 3);
152 constexpr T2 t2(1.1, 3, 2);
153 static_assert(!(t1 == t2), "");
154 static_assert(t1 != t2, "");
155 }
156#endif
157
158 return 0;
159}
160

source code of libcxx/test/std/utilities/tuple/tuple.tuple/tuple.rel/eq.pass.cpp