insert_iter_iter_iter.pass.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. // vector<bool>
  10. // template <class Iter>
  11. // iterator insert(const_iterator position, Iter first, Iter last);
  12. #include <vector>
  13. #include <cassert>
  14. #include <cstddef>
  15. #include "test_macros.h"
  16. #include "test_iterators.h"
  17. #include "min_allocator.h"
  18. int main(int, char**)
  19. {
  20. {
  21. std::vector<bool> v(100);
  22. bool a[] = {1, 0, 0, 1, 1};
  23. const unsigned N = sizeof(a)/sizeof(a[0]);
  24. std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const bool*>(a),
  25. input_iterator<const bool*>(a+N));
  26. assert(v.size() == 100 + N);
  27. assert(i == v.begin() + 10);
  28. std::size_t j;
  29. for (j = 0; j < 10; ++j)
  30. assert(v[j] == 0);
  31. for (std::size_t k = 0; k < N; ++j, ++k)
  32. assert(v[j] == a[k]);
  33. for (; j < v.size(); ++j)
  34. assert(v[j] == 0);
  35. }
  36. {
  37. std::vector<bool> v(100);
  38. bool a[] = {1, 0, 0, 1, 1};
  39. const unsigned N = sizeof(a)/sizeof(a[0]);
  40. std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
  41. forward_iterator<const bool*>(a+N));
  42. assert(v.size() == 100 + N);
  43. assert(i == v.begin() + 10);
  44. int j;
  45. for (j = 0; j < 10; ++j)
  46. assert(v[j] == 0);
  47. for (std::size_t k = 0; k < N; ++j, ++k)
  48. assert(v[j] == a[k]);
  49. for (; j < 105; ++j)
  50. assert(v[j] == 0);
  51. }
  52. {
  53. std::vector<bool> v(100);
  54. while(v.size() < v.capacity()) v.push_back(false);
  55. size_t sz = v.size();
  56. bool a[] = {1, 0, 0, 1, 1};
  57. const unsigned N = sizeof(a)/sizeof(a[0]);
  58. std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
  59. forward_iterator<const bool*>(a+N));
  60. assert(v.size() == sz + N);
  61. assert(i == v.begin() + 10);
  62. std::size_t j;
  63. for (j = 0; j < 10; ++j)
  64. assert(v[j] == 0);
  65. for (std::size_t k = 0; k < N; ++j, ++k)
  66. assert(v[j] == a[k]);
  67. for (; j < v.size(); ++j)
  68. assert(v[j] == 0);
  69. }
  70. {
  71. std::vector<bool> v(100);
  72. while(v.size() < v.capacity()) v.push_back(false);
  73. v.pop_back(); v.pop_back(); v.pop_back();
  74. size_t sz = v.size();
  75. bool a[] = {1, 0, 0, 1, 1};
  76. const unsigned N = sizeof(a)/sizeof(a[0]);
  77. std::vector<bool>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
  78. forward_iterator<const bool*>(a+N));
  79. assert(v.size() == sz + N);
  80. assert(i == v.begin() + 10);
  81. std::size_t j;
  82. for (j = 0; j < 10; ++j)
  83. assert(v[j] == 0);
  84. for (std::size_t k = 0; k < N; ++j, ++k)
  85. assert(v[j] == a[k]);
  86. for (; j < v.size(); ++j)
  87. assert(v[j] == 0);
  88. }
  89. #if TEST_STD_VER >= 11
  90. {
  91. std::vector<bool, min_allocator<bool>> v(100);
  92. bool a[] = {1, 0, 0, 1, 1};
  93. const unsigned N = sizeof(a)/sizeof(a[0]);
  94. std::vector<bool, min_allocator<bool>>::iterator i = v.insert(v.cbegin() + 10, input_iterator<const bool*>(a),
  95. input_iterator<const bool*>(a+N));
  96. assert(v.size() == 100 + N);
  97. assert(i == v.begin() + 10);
  98. std::size_t j;
  99. for (j = 0; j < 10; ++j)
  100. assert(v[j] == 0);
  101. for (std::size_t k = 0; k < N; ++j, ++k)
  102. assert(v[j] == a[k]);
  103. for (; j < v.size(); ++j)
  104. assert(v[j] == 0);
  105. }
  106. {
  107. std::vector<bool, min_allocator<bool>> v(100);
  108. bool a[] = {1, 0, 0, 1, 1};
  109. const unsigned N = sizeof(a)/sizeof(a[0]);
  110. std::vector<bool, min_allocator<bool>>::iterator i = v.insert(v.cbegin() + 10, forward_iterator<const bool*>(a),
  111. forward_iterator<const bool*>(a+N));
  112. assert(v.size() == 100 + N);
  113. assert(i == v.begin() + 10);
  114. std::size_t j;
  115. for (j = 0; j < 10; ++j)
  116. assert(v[j] == 0);
  117. for (std::size_t k = 0; k < N; ++j, ++k)
  118. assert(v[j] == a[k]);
  119. for (; j < v.size(); ++j)
  120. assert(v[j] == 0);
  121. }
  122. #endif
  123. return 0;
  124. }