xref: /minix3/external/bsd/libc++/dist/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.rel/eq.pass.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <tuple>
11 
12 // template <class... Types> class tuple;
13 
14 // template<class... TTypes, class... UTypes>
15 //   bool
16 //   operator==(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
17 
18 // UNSUPPORTED: c++98, c++03
19 
20 #include <tuple>
21 #include <string>
22 #include <cassert>
23 
main()24 int main()
25 {
26     {
27         typedef std::tuple<> T1;
28         typedef std::tuple<> T2;
29         const T1 t1;
30         const T2 t2;
31         assert(t1 == t2);
32         assert(!(t1 != t2));
33     }
34     {
35         typedef std::tuple<int> T1;
36         typedef std::tuple<double> T2;
37         const T1 t1(1);
38         const T2 t2(1.1);
39         assert(!(t1 == t2));
40         assert(t1 != t2);
41     }
42     {
43         typedef std::tuple<int> T1;
44         typedef std::tuple<double> T2;
45         const T1 t1(1);
46         const T2 t2(1);
47         assert(t1 == t2);
48         assert(!(t1 != t2));
49     }
50     {
51         typedef std::tuple<int, double> T1;
52         typedef std::tuple<double, char> T2;
53         const T1 t1(1, 2);
54         const T2 t2(1, char(2));
55         assert(t1 == t2);
56         assert(!(t1 != t2));
57     }
58     {
59         typedef std::tuple<int, double> T1;
60         typedef std::tuple<double, char> T2;
61         const T1 t1(1, 2);
62         const T2 t2(1, char(3));
63         assert(!(t1 == t2));
64         assert(t1 != t2);
65     }
66     {
67         typedef std::tuple<int, double> T1;
68         typedef std::tuple<double, char> T2;
69         const T1 t1(1, 2);
70         const T2 t2(1.1, char(2));
71         assert(!(t1 == t2));
72         assert(t1 != t2);
73     }
74     {
75         typedef std::tuple<int, double> T1;
76         typedef std::tuple<double, char> T2;
77         const T1 t1(1, 2);
78         const T2 t2(1.1, char(3));
79         assert(!(t1 == t2));
80         assert(t1 != t2);
81     }
82     {
83         typedef std::tuple<char, int, double> T1;
84         typedef std::tuple<double, char, int> T2;
85         const T1 t1(1, 2, 3);
86         const T2 t2(1, 2, 3);
87         assert(t1 == t2);
88         assert(!(t1 != t2));
89     }
90     {
91         typedef std::tuple<char, int, double> T1;
92         typedef std::tuple<double, char, int> T2;
93         const T1 t1(1, 2, 3);
94         const T2 t2(1.1, 2, 3);
95         assert(!(t1 == t2));
96         assert(t1 != t2);
97     }
98     {
99         typedef std::tuple<char, int, double> T1;
100         typedef std::tuple<double, char, int> T2;
101         const T1 t1(1, 2, 3);
102         const T2 t2(1, 3, 3);
103         assert(!(t1 == t2));
104         assert(t1 != t2);
105     }
106     {
107         typedef std::tuple<char, int, double> T1;
108         typedef std::tuple<double, char, int> T2;
109         const T1 t1(1, 2, 3);
110         const T2 t2(1, 2, 4);
111         assert(!(t1 == t2));
112         assert(t1 != t2);
113     }
114     {
115         typedef std::tuple<char, int, double> T1;
116         typedef std::tuple<double, char, int> T2;
117         const T1 t1(1, 2, 3);
118         const T2 t2(1, 3, 2);
119         assert(!(t1 == t2));
120         assert(t1 != t2);
121     }
122     {
123         typedef std::tuple<char, int, double> T1;
124         typedef std::tuple<double, char, int> T2;
125         const T1 t1(1, 2, 3);
126         const T2 t2(1.1, 2, 2);
127         assert(!(t1 == t2));
128         assert(t1 != t2);
129     }
130     {
131         typedef std::tuple<char, int, double> T1;
132         typedef std::tuple<double, char, int> T2;
133         const T1 t1(1, 2, 3);
134         const T2 t2(1.1, 3, 3);
135         assert(!(t1 == t2));
136         assert(t1 != t2);
137     }
138     {
139         typedef std::tuple<char, int, double> T1;
140         typedef std::tuple<double, char, int> T2;
141         const T1 t1(1, 2, 3);
142         const T2 t2(1.1, 3, 2);
143         assert(!(t1 == t2));
144         assert(t1 != t2);
145     }
146 #if _LIBCPP_STD_VER > 11
147     {
148         typedef std::tuple<char, int, double> T1;
149         typedef std::tuple<double, char, int> T2;
150         constexpr T1 t1(1, 2, 3);
151         constexpr T2 t2(1.1, 3, 2);
152         static_assert(!(t1 == t2), "");
153         static_assert(t1 != t2, "");
154     }
155 #endif
156 }
157