//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // <tuple> // template <class... Types> class tuple; // template<class... TTypes, class... UTypes> // bool // operator<(const tuple<TTypes...>& t, const tuple<UTypes...>& u); // // template<class... TTypes, class... UTypes> // bool // operator>(const tuple<TTypes...>& t, const tuple<UTypes...>& u); // // template<class... TTypes, class... UTypes> // bool // operator<=(const tuple<TTypes...>& t, const tuple<UTypes...>& u); // // template<class... TTypes, class... UTypes> // bool // operator>=(const tuple<TTypes...>& t, const tuple<UTypes...>& u); // UNSUPPORTED: c++98, c++03 #include <tuple> #include <string> #include <cassert> #include "test_macros.h" int main() { { typedef std::tuple<> T1; typedef std::tuple<> T2; const T1 t1; const T2 t2; assert(!(t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long> T1; typedef std::tuple<double> T2; const T1 t1(1); const T2 t2(1); assert(!(t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long> T1; typedef std::tuple<double> T2; const T1 t1(1); const T2 t2(0.9); assert(!(t1 < t2)); assert(!(t1 <= t2)); assert( (t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long> T1; typedef std::tuple<double> T2; const T1 t1(1); const T2 t2(1.1); assert( (t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert(!(t1 >= t2)); } { typedef std::tuple<long, int> T1; typedef std::tuple<double, long> T2; const T1 t1(1, 2); const T2 t2(1, 2); assert(!(t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int> T1; typedef std::tuple<double, long> T2; const T1 t1(1, 2); const T2 t2(0.9, 2); assert(!(t1 < t2)); assert(!(t1 <= t2)); assert( (t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int> T1; typedef std::tuple<double, long> T2; const T1 t1(1, 2); const T2 t2(1.1, 2); assert( (t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert(!(t1 >= t2)); } { typedef std::tuple<long, int> T1; typedef std::tuple<double, long> T2; const T1 t1(1, 2); const T2 t2(1, 1); assert(!(t1 < t2)); assert(!(t1 <= t2)); assert( (t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int> T1; typedef std::tuple<double, long> T2; const T1 t1(1, 2); const T2 t2(1, 3); assert( (t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert(!(t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(1, 2, 3); assert(!(t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(0.9, 2, 3); assert(!(t1 < t2)); assert(!(t1 <= t2)); assert( (t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(1.1, 2, 3); assert( (t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert(!(t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(1, 1, 3); assert(!(t1 < t2)); assert(!(t1 <= t2)); assert( (t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(1, 3, 3); assert( (t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert(!(t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(1, 2, 2); assert(!(t1 < t2)); assert(!(t1 <= t2)); assert( (t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; const T1 t1(1, 2, 3); const T2 t2(1, 2, 4); assert( (t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert(!(t1 >= t2)); } #if TEST_STD_VER > 11 { typedef std::tuple<long, int, double> T1; typedef std::tuple<double, long, int> T2; constexpr T1 t1(1, 2, 3); constexpr T2 t2(1, 2, 4); static_assert( (t1 < t2), ""); static_assert( (t1 <= t2), ""); static_assert(!(t1 > t2), ""); static_assert(!(t1 >= t2), ""); } #endif }