lt.pass.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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. // <tuple>
  10. // template <class... Types> class tuple;
  11. // template<class... TTypes, class... UTypes>
  12. // bool
  13. // operator<(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
  14. //
  15. // template<class... TTypes, class... UTypes>
  16. // bool
  17. // operator>(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
  18. //
  19. // template<class... TTypes, class... UTypes>
  20. // bool
  21. // operator<=(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
  22. //
  23. // template<class... TTypes, class... UTypes>
  24. // bool
  25. // operator>=(const tuple<TTypes...>& t, const tuple<UTypes...>& u);
  26. // UNSUPPORTED: c++98, c++03
  27. #include <tuple>
  28. #include <string>
  29. #include <cassert>
  30. #include "test_macros.h"
  31. int main()
  32. {
  33. {
  34. typedef std::tuple<> T1;
  35. typedef std::tuple<> T2;
  36. const T1 t1;
  37. const T2 t2;
  38. assert(!(t1 < t2));
  39. assert( (t1 <= t2));
  40. assert(!(t1 > t2));
  41. assert( (t1 >= t2));
  42. }
  43. {
  44. typedef std::tuple<long> 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. assert(!(t1 > t2));
  51. assert( (t1 >= t2));
  52. }
  53. {
  54. typedef std::tuple<long> T1;
  55. typedef std::tuple<double> T2;
  56. const T1 t1(1);
  57. const T2 t2(0.9);
  58. assert(!(t1 < t2));
  59. assert(!(t1 <= t2));
  60. assert( (t1 > t2));
  61. assert( (t1 >= t2));
  62. }
  63. {
  64. typedef std::tuple<long> T1;
  65. typedef std::tuple<double> T2;
  66. const T1 t1(1);
  67. const T2 t2(1.1);
  68. assert( (t1 < t2));
  69. assert( (t1 <= t2));
  70. assert(!(t1 > t2));
  71. assert(!(t1 >= t2));
  72. }
  73. {
  74. typedef std::tuple<long, int> T1;
  75. typedef std::tuple<double, long> T2;
  76. const T1 t1(1, 2);
  77. const T2 t2(1, 2);
  78. assert(!(t1 < t2));
  79. assert( (t1 <= t2));
  80. assert(!(t1 > t2));
  81. assert( (t1 >= t2));
  82. }
  83. {
  84. typedef std::tuple<long, int> T1;
  85. typedef std::tuple<double, long> T2;
  86. const T1 t1(1, 2);
  87. const T2 t2(0.9, 2);
  88. assert(!(t1 < t2));
  89. assert(!(t1 <= t2));
  90. assert( (t1 > t2));
  91. assert( (t1 >= t2));
  92. }
  93. {
  94. typedef std::tuple<long, int> T1;
  95. typedef std::tuple<double, long> T2;
  96. const T1 t1(1, 2);
  97. const T2 t2(1.1, 2);
  98. assert( (t1 < t2));
  99. assert( (t1 <= t2));
  100. assert(!(t1 > t2));
  101. assert(!(t1 >= t2));
  102. }
  103. {
  104. typedef std::tuple<long, int> T1;
  105. typedef std::tuple<double, long> T2;
  106. const T1 t1(1, 2);
  107. const T2 t2(1, 1);
  108. assert(!(t1 < t2));
  109. assert(!(t1 <= t2));
  110. assert( (t1 > t2));
  111. assert( (t1 >= t2));
  112. }
  113. {
  114. typedef std::tuple<long, int> T1;
  115. typedef std::tuple<double, long> T2;
  116. const T1 t1(1, 2);
  117. const T2 t2(1, 3);
  118. assert( (t1 < t2));
  119. assert( (t1 <= t2));
  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, 2, 3);
  128. assert(!(t1 < t2));
  129. assert( (t1 <= t2));
  130. assert(!(t1 > t2));
  131. assert( (t1 >= t2));
  132. }
  133. {
  134. typedef std::tuple<long, int, double> T1;
  135. typedef std::tuple<double, long, int> T2;
  136. const T1 t1(1, 2, 3);
  137. const T2 t2(0.9, 2, 3);
  138. assert(!(t1 < t2));
  139. assert(!(t1 <= t2));
  140. assert( (t1 > t2));
  141. assert( (t1 >= t2));
  142. }
  143. {
  144. typedef std::tuple<long, int, double> T1;
  145. typedef std::tuple<double, long, int> T2;
  146. const T1 t1(1, 2, 3);
  147. const T2 t2(1.1, 2, 3);
  148. assert( (t1 < t2));
  149. assert( (t1 <= t2));
  150. assert(!(t1 > t2));
  151. assert(!(t1 >= t2));
  152. }
  153. {
  154. typedef std::tuple<long, int, double> T1;
  155. typedef std::tuple<double, long, int> T2;
  156. const T1 t1(1, 2, 3);
  157. const T2 t2(1, 1, 3);
  158. assert(!(t1 < t2));
  159. assert(!(t1 <= t2));
  160. assert( (t1 > t2));
  161. assert( (t1 >= t2));
  162. }
  163. {
  164. typedef std::tuple<long, int, double> T1;
  165. typedef std::tuple<double, long, int> T2;
  166. const T1 t1(1, 2, 3);
  167. const T2 t2(1, 3, 3);
  168. assert( (t1 < t2));
  169. assert( (t1 <= t2));
  170. assert(!(t1 > t2));
  171. assert(!(t1 >= t2));
  172. }
  173. {
  174. typedef std::tuple<long, int, double> T1;
  175. typedef std::tuple<double, long, int> T2;
  176. const T1 t1(1, 2, 3);
  177. const T2 t2(1, 2, 2);
  178. assert(!(t1 < t2));
  179. assert(!(t1 <= t2));
  180. assert( (t1 > t2));
  181. assert( (t1 >= t2));
  182. }
  183. {
  184. typedef std::tuple<long, int, double> T1;
  185. typedef std::tuple<double, long, int> T2;
  186. const T1 t1(1, 2, 3);
  187. const T2 t2(1, 2, 4);
  188. assert( (t1 < t2));
  189. assert( (t1 <= t2));
  190. assert(!(t1 > t2));
  191. assert(!(t1 >= t2));
  192. }
  193. #if TEST_STD_VER > 11
  194. {
  195. typedef std::tuple<long, int, double> T1;
  196. typedef std::tuple<double, long, int> T2;
  197. constexpr T1 t1(1, 2, 3);
  198. constexpr T2 t2(1, 2, 4);
  199. static_assert( (t1 < t2), "");
  200. static_assert( (t1 <= t2), "");
  201. static_assert(!(t1 > t2), "");
  202. static_assert(!(t1 >= t2), "");
  203. }
  204. #endif
  205. }