xref: /llvm-project/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.rel/lt.pass.cpp (revision 31cbe0f240f660f15602c96b787c58a26f17e179)
15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric 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
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier 
95a83710eSEric Fiselier // <tuple>
105a83710eSEric Fiselier 
115a83710eSEric Fiselier // template <class... Types> class tuple;
125a83710eSEric Fiselier 
135a83710eSEric Fiselier // template<class... TTypes, class... UTypes>
145a83710eSEric Fiselier //   bool
155a83710eSEric Fiselier //   operator<(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
165a83710eSEric Fiselier //
175a83710eSEric Fiselier // template<class... TTypes, class... UTypes>
185a83710eSEric Fiselier //   bool
195a83710eSEric Fiselier //   operator>(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
205a83710eSEric Fiselier //
215a83710eSEric Fiselier // template<class... TTypes, class... UTypes>
225a83710eSEric Fiselier //   bool
235a83710eSEric Fiselier //   operator<=(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
245a83710eSEric Fiselier //
255a83710eSEric Fiselier // template<class... TTypes, class... UTypes>
265a83710eSEric Fiselier //   bool
275a83710eSEric Fiselier //   operator>=(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
285a83710eSEric Fiselier 
29*31cbe0f2SLouis Dionne // UNSUPPORTED: c++03
300a52cd79SEric Fiselier 
315a83710eSEric Fiselier #include <tuple>
325a83710eSEric Fiselier #include <string>
335a83710eSEric Fiselier #include <cassert>
345a83710eSEric Fiselier 
350f901c7eSStephan T. Lavavej #include "test_macros.h"
360f901c7eSStephan T. Lavavej 
main(int,char **)372df59c50SJF Bastien int main(int, char**)
385a83710eSEric Fiselier {
395a83710eSEric Fiselier     {
405a83710eSEric Fiselier         typedef std::tuple<> T1;
415a83710eSEric Fiselier         typedef std::tuple<> T2;
425a83710eSEric Fiselier         const T1 t1;
435a83710eSEric Fiselier         const T2 t2;
445a83710eSEric Fiselier         assert(!(t1 <  t2));
455a83710eSEric Fiselier         assert( (t1 <= t2));
465a83710eSEric Fiselier         assert(!(t1 >  t2));
475a83710eSEric Fiselier         assert( (t1 >= t2));
485a83710eSEric Fiselier     }
495a83710eSEric Fiselier     {
5084ade982SStephan T. Lavavej         typedef std::tuple<long> T1;
515a83710eSEric Fiselier         typedef std::tuple<double> T2;
525a83710eSEric Fiselier         const T1 t1(1);
535a83710eSEric Fiselier         const T2 t2(1);
545a83710eSEric Fiselier         assert(!(t1 <  t2));
555a83710eSEric Fiselier         assert( (t1 <= t2));
565a83710eSEric Fiselier         assert(!(t1 >  t2));
575a83710eSEric Fiselier         assert( (t1 >= t2));
585a83710eSEric Fiselier     }
595a83710eSEric Fiselier     {
6084ade982SStephan T. Lavavej         typedef std::tuple<long> T1;
615a83710eSEric Fiselier         typedef std::tuple<double> T2;
625a83710eSEric Fiselier         const T1 t1(1);
635a83710eSEric Fiselier         const T2 t2(0.9);
645a83710eSEric Fiselier         assert(!(t1 <  t2));
655a83710eSEric Fiselier         assert(!(t1 <= t2));
665a83710eSEric Fiselier         assert( (t1 >  t2));
675a83710eSEric Fiselier         assert( (t1 >= t2));
685a83710eSEric Fiselier     }
695a83710eSEric Fiselier     {
7084ade982SStephan T. Lavavej         typedef std::tuple<long> T1;
715a83710eSEric Fiselier         typedef std::tuple<double> T2;
725a83710eSEric Fiselier         const T1 t1(1);
735a83710eSEric Fiselier         const T2 t2(1.1);
745a83710eSEric Fiselier         assert( (t1 <  t2));
755a83710eSEric Fiselier         assert( (t1 <= t2));
765a83710eSEric Fiselier         assert(!(t1 >  t2));
775a83710eSEric Fiselier         assert(!(t1 >= t2));
785a83710eSEric Fiselier     }
795a83710eSEric Fiselier     {
8084ade982SStephan T. Lavavej         typedef std::tuple<long, int> T1;
8184ade982SStephan T. Lavavej         typedef std::tuple<double, long> T2;
825a83710eSEric Fiselier         const T1 t1(1, 2);
835a83710eSEric Fiselier         const T2 t2(1, 2);
845a83710eSEric Fiselier         assert(!(t1 <  t2));
855a83710eSEric Fiselier         assert( (t1 <= t2));
865a83710eSEric Fiselier         assert(!(t1 >  t2));
875a83710eSEric Fiselier         assert( (t1 >= t2));
885a83710eSEric Fiselier     }
895a83710eSEric Fiselier     {
9084ade982SStephan T. Lavavej         typedef std::tuple<long, int> T1;
9184ade982SStephan T. Lavavej         typedef std::tuple<double, long> T2;
925a83710eSEric Fiselier         const T1 t1(1, 2);
935a83710eSEric Fiselier         const T2 t2(0.9, 2);
945a83710eSEric Fiselier         assert(!(t1 <  t2));
955a83710eSEric Fiselier         assert(!(t1 <= t2));
965a83710eSEric Fiselier         assert( (t1 >  t2));
975a83710eSEric Fiselier         assert( (t1 >= t2));
985a83710eSEric Fiselier     }
995a83710eSEric Fiselier     {
10084ade982SStephan T. Lavavej         typedef std::tuple<long, int> T1;
10184ade982SStephan T. Lavavej         typedef std::tuple<double, long> T2;
1025a83710eSEric Fiselier         const T1 t1(1, 2);
1035a83710eSEric Fiselier         const T2 t2(1.1, 2);
1045a83710eSEric Fiselier         assert( (t1 <  t2));
1055a83710eSEric Fiselier         assert( (t1 <= t2));
1065a83710eSEric Fiselier         assert(!(t1 >  t2));
1075a83710eSEric Fiselier         assert(!(t1 >= t2));
1085a83710eSEric Fiselier     }
1095a83710eSEric Fiselier     {
11084ade982SStephan T. Lavavej         typedef std::tuple<long, int> T1;
11184ade982SStephan T. Lavavej         typedef std::tuple<double, long> T2;
1125a83710eSEric Fiselier         const T1 t1(1, 2);
1135a83710eSEric Fiselier         const T2 t2(1, 1);
1145a83710eSEric Fiselier         assert(!(t1 <  t2));
1155a83710eSEric Fiselier         assert(!(t1 <= t2));
1165a83710eSEric Fiselier         assert( (t1 >  t2));
1175a83710eSEric Fiselier         assert( (t1 >= t2));
1185a83710eSEric Fiselier     }
1195a83710eSEric Fiselier     {
12084ade982SStephan T. Lavavej         typedef std::tuple<long, int> T1;
12184ade982SStephan T. Lavavej         typedef std::tuple<double, long> T2;
1225a83710eSEric Fiselier         const T1 t1(1, 2);
1235a83710eSEric Fiselier         const T2 t2(1, 3);
1245a83710eSEric Fiselier         assert( (t1 <  t2));
1255a83710eSEric Fiselier         assert( (t1 <= t2));
1265a83710eSEric Fiselier         assert(!(t1 >  t2));
1275a83710eSEric Fiselier         assert(!(t1 >= t2));
1285a83710eSEric Fiselier     }
1295a83710eSEric Fiselier     {
13084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
13184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1325a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1335a83710eSEric Fiselier         const T2 t2(1, 2, 3);
1345a83710eSEric Fiselier         assert(!(t1 <  t2));
1355a83710eSEric Fiselier         assert( (t1 <= t2));
1365a83710eSEric Fiselier         assert(!(t1 >  t2));
1375a83710eSEric Fiselier         assert( (t1 >= t2));
1385a83710eSEric Fiselier     }
1395a83710eSEric Fiselier     {
14084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
14184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1425a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1435a83710eSEric Fiselier         const T2 t2(0.9, 2, 3);
1445a83710eSEric Fiselier         assert(!(t1 <  t2));
1455a83710eSEric Fiselier         assert(!(t1 <= t2));
1465a83710eSEric Fiselier         assert( (t1 >  t2));
1475a83710eSEric Fiselier         assert( (t1 >= t2));
1485a83710eSEric Fiselier     }
1495a83710eSEric Fiselier     {
15084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
15184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1525a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1535a83710eSEric Fiselier         const T2 t2(1.1, 2, 3);
1545a83710eSEric Fiselier         assert( (t1 <  t2));
1555a83710eSEric Fiselier         assert( (t1 <= t2));
1565a83710eSEric Fiselier         assert(!(t1 >  t2));
1575a83710eSEric Fiselier         assert(!(t1 >= t2));
1585a83710eSEric Fiselier     }
1595a83710eSEric Fiselier     {
16084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
16184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1625a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1635a83710eSEric Fiselier         const T2 t2(1, 1, 3);
1645a83710eSEric Fiselier         assert(!(t1 <  t2));
1655a83710eSEric Fiselier         assert(!(t1 <= t2));
1665a83710eSEric Fiselier         assert( (t1 >  t2));
1675a83710eSEric Fiselier         assert( (t1 >= t2));
1685a83710eSEric Fiselier     }
1695a83710eSEric Fiselier     {
17084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
17184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1725a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1735a83710eSEric Fiselier         const T2 t2(1, 3, 3);
1745a83710eSEric Fiselier         assert( (t1 <  t2));
1755a83710eSEric Fiselier         assert( (t1 <= t2));
1765a83710eSEric Fiselier         assert(!(t1 >  t2));
1775a83710eSEric Fiselier         assert(!(t1 >= t2));
1785a83710eSEric Fiselier     }
1795a83710eSEric Fiselier     {
18084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
18184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1825a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1835a83710eSEric Fiselier         const T2 t2(1, 2, 2);
1845a83710eSEric Fiselier         assert(!(t1 <  t2));
1855a83710eSEric Fiselier         assert(!(t1 <= t2));
1865a83710eSEric Fiselier         assert( (t1 >  t2));
1875a83710eSEric Fiselier         assert( (t1 >= t2));
1885a83710eSEric Fiselier     }
1895a83710eSEric Fiselier     {
19084ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
19184ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
1925a83710eSEric Fiselier         const T1 t1(1, 2, 3);
1935a83710eSEric Fiselier         const T2 t2(1, 2, 4);
1945a83710eSEric Fiselier         assert( (t1 <  t2));
1955a83710eSEric Fiselier         assert( (t1 <= t2));
1965a83710eSEric Fiselier         assert(!(t1 >  t2));
1975a83710eSEric Fiselier         assert(!(t1 >= t2));
1985a83710eSEric Fiselier     }
1990f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
2005a83710eSEric Fiselier     {
20184ade982SStephan T. Lavavej         typedef std::tuple<long, int, double> T1;
20284ade982SStephan T. Lavavej         typedef std::tuple<double, long, int> T2;
2035a83710eSEric Fiselier         constexpr T1 t1(1, 2, 3);
2045a83710eSEric Fiselier         constexpr T2 t2(1, 2, 4);
2055a83710eSEric Fiselier         static_assert( (t1 <  t2), "");
2065a83710eSEric Fiselier         static_assert( (t1 <= t2), "");
2075a83710eSEric Fiselier         static_assert(!(t1 >  t2), "");
2085a83710eSEric Fiselier         static_assert(!(t1 >= t2), "");
2095a83710eSEric Fiselier     }
2105a83710eSEric Fiselier #endif
2112df59c50SJF Bastien 
2122df59c50SJF Bastien   return 0;
2135a83710eSEric Fiselier }
214