iterators.pass.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. // <array>
  9. // iterator, const_iterator
  10. #include <array>
  11. #include <iterator>
  12. #include <cassert>
  13. #include "test_macros.h"
  14. // std::array is explicitly allowed to be initialized with A a = { init-list };.
  15. // Disable the missing braces warning for this reason.
  16. #include "disable_missing_braces_warning.h"
  17. int main(int, char**)
  18. {
  19. {
  20. typedef std::array<int, 5> C;
  21. C c;
  22. C::iterator i;
  23. i = c.begin();
  24. C::const_iterator j;
  25. j = c.cbegin();
  26. assert(i == j);
  27. }
  28. {
  29. typedef std::array<int, 0> C;
  30. C c;
  31. C::iterator i;
  32. i = c.begin();
  33. C::const_iterator j;
  34. j = c.cbegin();
  35. assert(i == j);
  36. }
  37. #if TEST_STD_VER > 11
  38. { // N3644 testing
  39. {
  40. typedef std::array<int, 5> C;
  41. C::iterator ii1{}, ii2{};
  42. C::iterator ii4 = ii1;
  43. C::const_iterator cii{};
  44. assert ( ii1 == ii2 );
  45. assert ( ii1 == ii4 );
  46. assert ( ii1 == cii );
  47. assert ( !(ii1 != ii2 ));
  48. assert ( !(ii1 != cii ));
  49. C c;
  50. assert ( c.begin() == std::begin(c));
  51. assert ( c.cbegin() == std::cbegin(c));
  52. assert ( c.rbegin() == std::rbegin(c));
  53. assert ( c.crbegin() == std::crbegin(c));
  54. assert ( c.end() == std::end(c));
  55. assert ( c.cend() == std::cend(c));
  56. assert ( c.rend() == std::rend(c));
  57. assert ( c.crend() == std::crend(c));
  58. assert ( std::begin(c) != std::end(c));
  59. assert ( std::rbegin(c) != std::rend(c));
  60. assert ( std::cbegin(c) != std::cend(c));
  61. assert ( std::crbegin(c) != std::crend(c));
  62. }
  63. {
  64. typedef std::array<int, 0> C;
  65. C::iterator ii1{}, ii2{};
  66. C::iterator ii4 = ii1;
  67. C::const_iterator cii{};
  68. assert ( ii1 == ii2 );
  69. assert ( ii1 == ii4 );
  70. assert (!(ii1 != ii2 ));
  71. assert ( (ii1 == cii ));
  72. assert ( (cii == ii1 ));
  73. assert (!(ii1 != cii ));
  74. assert (!(cii != ii1 ));
  75. assert (!(ii1 < cii ));
  76. assert (!(cii < ii1 ));
  77. assert ( (ii1 <= cii ));
  78. assert ( (cii <= ii1 ));
  79. assert (!(ii1 > cii ));
  80. assert (!(cii > ii1 ));
  81. assert ( (ii1 >= cii ));
  82. assert ( (cii >= ii1 ));
  83. assert (cii - ii1 == 0);
  84. assert (ii1 - cii == 0);
  85. C c;
  86. assert ( c.begin() == std::begin(c));
  87. assert ( c.cbegin() == std::cbegin(c));
  88. assert ( c.rbegin() == std::rbegin(c));
  89. assert ( c.crbegin() == std::crbegin(c));
  90. assert ( c.end() == std::end(c));
  91. assert ( c.cend() == std::cend(c));
  92. assert ( c.rend() == std::rend(c));
  93. assert ( c.crend() == std::crend(c));
  94. assert ( std::begin(c) == std::end(c));
  95. assert ( std::rbegin(c) == std::rend(c));
  96. assert ( std::cbegin(c) == std::cend(c));
  97. assert ( std::crbegin(c) == std::crend(c));
  98. }
  99. }
  100. #endif
  101. #if TEST_STD_VER > 14
  102. {
  103. typedef std::array<int, 5> C;
  104. constexpr C c{0,1,2,3,4};
  105. static_assert ( c.begin() == std::begin(c), "");
  106. static_assert ( c.cbegin() == std::cbegin(c), "");
  107. static_assert ( c.end() == std::end(c), "");
  108. static_assert ( c.cend() == std::cend(c), "");
  109. static_assert ( c.rbegin() == std::rbegin(c), "");
  110. static_assert ( c.crbegin() == std::crbegin(c), "");
  111. static_assert ( c.rend() == std::rend(c), "");
  112. static_assert ( c.crend() == std::crend(c), "");
  113. static_assert ( std::begin(c) != std::end(c), "");
  114. static_assert ( std::rbegin(c) != std::rend(c), "");
  115. static_assert ( std::cbegin(c) != std::cend(c), "");
  116. static_assert ( std::crbegin(c) != std::crend(c), "");
  117. static_assert ( *c.begin() == 0, "");
  118. static_assert ( *c.rbegin() == 4, "");
  119. static_assert ( *std::begin(c) == 0, "" );
  120. static_assert ( *std::cbegin(c) == 0, "" );
  121. static_assert ( *std::rbegin(c) == 4, "" );
  122. static_assert ( *std::crbegin(c) == 4, "" );
  123. }
  124. #endif
  125. return 0;
  126. }