iterators.pass.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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. // <vector>
  9. // iterator begin();
  10. // iterator end();
  11. // const_iterator begin() const;
  12. // const_iterator end() const;
  13. // const_iterator cbegin() const;
  14. // const_iterator cend() const;
  15. #include <vector>
  16. #include <cassert>
  17. #include <iterator>
  18. #include "test_macros.h"
  19. #include "min_allocator.h"
  20. int main(int, char**)
  21. {
  22. {
  23. typedef bool T;
  24. typedef std::vector<T> C;
  25. C c;
  26. C::iterator i = c.begin();
  27. C::iterator j = c.end();
  28. assert(std::distance(i, j) == 0);
  29. assert(i == j);
  30. }
  31. {
  32. typedef bool T;
  33. typedef std::vector<T> C;
  34. const C c;
  35. C::const_iterator i = c.begin();
  36. C::const_iterator j = c.end();
  37. assert(std::distance(i, j) == 0);
  38. assert(i == j);
  39. }
  40. {
  41. typedef bool T;
  42. typedef std::vector<T> C;
  43. C c;
  44. C::const_iterator i = c.cbegin();
  45. C::const_iterator j = c.cend();
  46. assert(std::distance(i, j) == 0);
  47. assert(i == j);
  48. assert(i == c.end());
  49. }
  50. {
  51. typedef bool T;
  52. typedef std::vector<T> C;
  53. C::iterator i;
  54. C::const_iterator j;
  55. }
  56. #if TEST_STD_VER >= 11
  57. {
  58. typedef bool T;
  59. typedef std::vector<T, min_allocator<T>> C;
  60. C c;
  61. C::iterator i = c.begin();
  62. C::iterator j = c.end();
  63. assert(std::distance(i, j) == 0);
  64. assert(i == j);
  65. }
  66. {
  67. typedef bool T;
  68. typedef std::vector<T, min_allocator<T>> C;
  69. const C c;
  70. C::const_iterator i = c.begin();
  71. C::const_iterator j = c.end();
  72. assert(std::distance(i, j) == 0);
  73. assert(i == j);
  74. }
  75. {
  76. typedef bool T;
  77. typedef std::vector<T, min_allocator<T>> C;
  78. C c;
  79. C::const_iterator i = c.cbegin();
  80. C::const_iterator j = c.cend();
  81. assert(std::distance(i, j) == 0);
  82. assert(i == j);
  83. assert(i == c.end());
  84. }
  85. {
  86. typedef bool T;
  87. typedef std::vector<T, min_allocator<T>> C;
  88. C::iterator i;
  89. C::const_iterator j;
  90. }
  91. #endif
  92. #if TEST_STD_VER > 11
  93. { // N3644 testing
  94. std::vector<bool>::iterator ii1{}, ii2{};
  95. std::vector<bool>::iterator ii4 = ii1;
  96. std::vector<bool>::const_iterator cii{};
  97. assert ( ii1 == ii2 );
  98. assert ( ii1 == ii4 );
  99. assert (!(ii1 != ii2 ));
  100. assert ( (ii1 == cii ));
  101. assert ( (cii == ii1 ));
  102. assert (!(ii1 != cii ));
  103. assert (!(cii != ii1 ));
  104. assert (!(ii1 < cii ));
  105. assert (!(cii < ii1 ));
  106. assert ( (ii1 <= cii ));
  107. assert ( (cii <= ii1 ));
  108. assert (!(ii1 > cii ));
  109. assert (!(cii > ii1 ));
  110. assert ( (ii1 >= cii ));
  111. assert ( (cii >= ii1 ));
  112. assert (cii - ii1 == 0);
  113. assert (ii1 - cii == 0);
  114. }
  115. #endif
  116. return 0;
  117. }