eq.pass.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. // UNSUPPORTED: c++98, c++03
  15. #include <tuple>
  16. #include <string>
  17. #include <cassert>
  18. #include "test_macros.h"
  19. int main()
  20. {
  21. {
  22. typedef std::tuple<> T1;
  23. typedef std::tuple<> T2;
  24. const T1 t1;
  25. const T2 t2;
  26. assert(t1 == t2);
  27. assert(!(t1 != t2));
  28. }
  29. {
  30. typedef std::tuple<int> T1;
  31. typedef std::tuple<double> T2;
  32. const T1 t1(1);
  33. const T2 t2(1.1);
  34. assert(!(t1 == t2));
  35. assert(t1 != t2);
  36. }
  37. {
  38. typedef std::tuple<int> T1;
  39. typedef std::tuple<double> T2;
  40. const T1 t1(1);
  41. const T2 t2(1);
  42. assert(t1 == t2);
  43. assert(!(t1 != t2));
  44. }
  45. {
  46. typedef std::tuple<int, double> T1;
  47. typedef std::tuple<double, long> T2;
  48. const T1 t1(1, 2);
  49. const T2 t2(1, 2);
  50. assert(t1 == t2);
  51. assert(!(t1 != t2));
  52. }
  53. {
  54. typedef std::tuple<int, double> T1;
  55. typedef std::tuple<double, long> T2;
  56. const T1 t1(1, 2);
  57. const T2 t2(1, 3);
  58. assert(!(t1 == t2));
  59. assert(t1 != t2);
  60. }
  61. {
  62. typedef std::tuple<int, double> T1;
  63. typedef std::tuple<double, long> T2;
  64. const T1 t1(1, 2);
  65. const T2 t2(1.1, 2);
  66. assert(!(t1 == t2));
  67. assert(t1 != t2);
  68. }
  69. {
  70. typedef std::tuple<int, double> T1;
  71. typedef std::tuple<double, long> T2;
  72. const T1 t1(1, 2);
  73. const T2 t2(1.1, 3);
  74. assert(!(t1 == t2));
  75. assert(t1 != t2);
  76. }
  77. {
  78. typedef std::tuple<long, int, double> T1;
  79. typedef std::tuple<double, long, int> T2;
  80. const T1 t1(1, 2, 3);
  81. const T2 t2(1, 2, 3);
  82. assert(t1 == t2);
  83. assert(!(t1 != t2));
  84. }
  85. {
  86. typedef std::tuple<long, int, double> T1;
  87. typedef std::tuple<double, long, int> T2;
  88. const T1 t1(1, 2, 3);
  89. const T2 t2(1.1, 2, 3);
  90. assert(!(t1 == t2));
  91. assert(t1 != t2);
  92. }
  93. {
  94. typedef std::tuple<long, int, double> T1;
  95. typedef std::tuple<double, long, int> T2;
  96. const T1 t1(1, 2, 3);
  97. const T2 t2(1, 3, 3);
  98. assert(!(t1 == t2));
  99. assert(t1 != t2);
  100. }
  101. {
  102. typedef std::tuple<long, int, double> T1;
  103. typedef std::tuple<double, long, int> T2;
  104. const T1 t1(1, 2, 3);
  105. const T2 t2(1, 2, 4);
  106. assert(!(t1 == t2));
  107. assert(t1 != t2);
  108. }
  109. {
  110. typedef std::tuple<long, int, double> T1;
  111. typedef std::tuple<double, long, int> T2;
  112. const T1 t1(1, 2, 3);
  113. const T2 t2(1, 3, 2);
  114. assert(!(t1 == t2));
  115. assert(t1 != t2);
  116. }
  117. {
  118. typedef std::tuple<long, int, double> T1;
  119. typedef std::tuple<double, long, int> T2;
  120. const T1 t1(1, 2, 3);
  121. const T2 t2(1.1, 2, 2);
  122. assert(!(t1 == t2));
  123. assert(t1 != t2);
  124. }
  125. {
  126. typedef std::tuple<long, int, double> T1;
  127. typedef std::tuple<double, long, int> T2;
  128. const T1 t1(1, 2, 3);
  129. const T2 t2(1.1, 3, 3);
  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(1.1, 3, 2);
  138. assert(!(t1 == t2));
  139. assert(t1 != t2);
  140. }
  141. #if TEST_STD_VER > 11
  142. {
  143. typedef std::tuple<long, int, double> T1;
  144. typedef std::tuple<double, long, int> T2;
  145. constexpr T1 t1(1, 2, 3);
  146. constexpr T2 t2(1.1, 3, 2);
  147. static_assert(!(t1 == t2), "");
  148. static_assert(t1 != t2, "");
  149. }
  150. #endif
  151. }