//===----------------------------------------------------------------------===// // // 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. // //===----------------------------------------------------------------------===// // // template class tuple; // template // bool // operator<(const tuple& t, const tuple& u); // // template // bool // operator>(const tuple& t, const tuple& u); // // template // bool // operator<=(const tuple& t, const tuple& u); // // template // bool // operator>=(const tuple& t, const tuple& u); #include #include #include 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 T1; typedef std::tuple T2; const T1 t1(1); const T2 t2(1); assert(!(t1 < t2)); assert( (t1 <= t2)); assert(!(t1 > t2)); assert( (t1 >= t2)); } { typedef std::tuple T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 T1; typedef std::tuple 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 _LIBCPP_STD_VER > 11 { typedef std::tuple T1; typedef std::tuple 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 }