lt.pass.cpp 5.7 KB

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