copy.pass.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. // XFAIL: libcpp-no-exceptions
  10. // <string>
  11. // size_type copy(charT* s, size_type n, size_type pos = 0) const;
  12. #include <string>
  13. #include <stdexcept>
  14. #include <algorithm>
  15. #include <cassert>
  16. #include "test_macros.h"
  17. #include "min_allocator.h"
  18. template <class S>
  19. void
  20. test(S str, typename S::value_type* s, typename S::size_type n,
  21. typename S::size_type pos)
  22. {
  23. try
  24. {
  25. const S& cs = str;
  26. typename S::size_type r = cs.copy(s, n, pos);
  27. assert(pos <= cs.size());
  28. typename S::size_type rlen = std::min(n, cs.size() - pos);
  29. assert(r == rlen);
  30. for (r = 0; r < rlen; ++r)
  31. assert(S::traits_type::eq(cs[pos+r], s[r]));
  32. }
  33. catch (std::out_of_range&)
  34. {
  35. assert(pos > str.size());
  36. }
  37. }
  38. int main()
  39. {
  40. {
  41. typedef std::string S;
  42. char s[50];
  43. test(S(""), s, 0, 0);
  44. test(S(""), s, 0, 1);
  45. test(S(""), s, 1, 0);
  46. test(S("abcde"), s, 0, 0);
  47. test(S("abcde"), s, 0, 1);
  48. test(S("abcde"), s, 0, 2);
  49. test(S("abcde"), s, 0, 4);
  50. test(S("abcde"), s, 0, 5);
  51. test(S("abcde"), s, 0, 6);
  52. test(S("abcde"), s, 1, 0);
  53. test(S("abcde"), s, 1, 1);
  54. test(S("abcde"), s, 1, 2);
  55. test(S("abcde"), s, 1, 4);
  56. test(S("abcde"), s, 1, 5);
  57. test(S("abcde"), s, 2, 0);
  58. test(S("abcde"), s, 2, 1);
  59. test(S("abcde"), s, 2, 2);
  60. test(S("abcde"), s, 2, 4);
  61. test(S("abcde"), s, 4, 0);
  62. test(S("abcde"), s, 4, 1);
  63. test(S("abcde"), s, 4, 2);
  64. test(S("abcde"), s, 5, 0);
  65. test(S("abcde"), s, 5, 1);
  66. test(S("abcde"), s, 6, 0);
  67. test(S("abcdefghijklmnopqrst"), s, 0, 0);
  68. test(S("abcdefghijklmnopqrst"), s, 0, 1);
  69. test(S("abcdefghijklmnopqrst"), s, 0, 2);
  70. test(S("abcdefghijklmnopqrst"), s, 0, 10);
  71. test(S("abcdefghijklmnopqrst"), s, 0, 19);
  72. test(S("abcdefghijklmnopqrst"), s, 0, 20);
  73. test(S("abcdefghijklmnopqrst"), s, 0, 21);
  74. test(S("abcdefghijklmnopqrst"), s, 1, 0);
  75. test(S("abcdefghijklmnopqrst"), s, 1, 1);
  76. test(S("abcdefghijklmnopqrst"), s, 1, 2);
  77. test(S("abcdefghijklmnopqrst"), s, 1, 9);
  78. test(S("abcdefghijklmnopqrst"), s, 1, 18);
  79. test(S("abcdefghijklmnopqrst"), s, 1, 19);
  80. test(S("abcdefghijklmnopqrst"), s, 1, 20);
  81. test(S("abcdefghijklmnopqrst"), s, 2, 0);
  82. test(S("abcdefghijklmnopqrst"), s, 2, 1);
  83. test(S("abcdefghijklmnopqrst"), s, 2, 2);
  84. test(S("abcdefghijklmnopqrst"), s, 2, 9);
  85. test(S("abcdefghijklmnopqrst"), s, 2, 17);
  86. test(S("abcdefghijklmnopqrst"), s, 2, 18);
  87. test(S("abcdefghijklmnopqrst"), s, 2, 19);
  88. test(S("abcdefghijklmnopqrst"), s, 10, 0);
  89. test(S("abcdefghijklmnopqrst"), s, 10, 1);
  90. test(S("abcdefghijklmnopqrst"), s, 10, 2);
  91. test(S("abcdefghijklmnopqrst"), s, 10, 5);
  92. test(S("abcdefghijklmnopqrst"), s, 10, 9);
  93. test(S("abcdefghijklmnopqrst"), s, 10, 10);
  94. test(S("abcdefghijklmnopqrst"), s, 10, 11);
  95. test(S("abcdefghijklmnopqrst"), s, 19, 0);
  96. test(S("abcdefghijklmnopqrst"), s, 19, 1);
  97. test(S("abcdefghijklmnopqrst"), s, 19, 2);
  98. test(S("abcdefghijklmnopqrst"), s, 20, 0);
  99. test(S("abcdefghijklmnopqrst"), s, 20, 1);
  100. test(S("abcdefghijklmnopqrst"), s, 21, 0);
  101. }
  102. #if TEST_STD_VER >= 11
  103. {
  104. typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
  105. char s[50];
  106. test(S(""), s, 0, 0);
  107. test(S(""), s, 0, 1);
  108. test(S(""), s, 1, 0);
  109. test(S("abcde"), s, 0, 0);
  110. test(S("abcde"), s, 0, 1);
  111. test(S("abcde"), s, 0, 2);
  112. test(S("abcde"), s, 0, 4);
  113. test(S("abcde"), s, 0, 5);
  114. test(S("abcde"), s, 0, 6);
  115. test(S("abcde"), s, 1, 0);
  116. test(S("abcde"), s, 1, 1);
  117. test(S("abcde"), s, 1, 2);
  118. test(S("abcde"), s, 1, 4);
  119. test(S("abcde"), s, 1, 5);
  120. test(S("abcde"), s, 2, 0);
  121. test(S("abcde"), s, 2, 1);
  122. test(S("abcde"), s, 2, 2);
  123. test(S("abcde"), s, 2, 4);
  124. test(S("abcde"), s, 4, 0);
  125. test(S("abcde"), s, 4, 1);
  126. test(S("abcde"), s, 4, 2);
  127. test(S("abcde"), s, 5, 0);
  128. test(S("abcde"), s, 5, 1);
  129. test(S("abcde"), s, 6, 0);
  130. test(S("abcdefghijklmnopqrst"), s, 0, 0);
  131. test(S("abcdefghijklmnopqrst"), s, 0, 1);
  132. test(S("abcdefghijklmnopqrst"), s, 0, 2);
  133. test(S("abcdefghijklmnopqrst"), s, 0, 10);
  134. test(S("abcdefghijklmnopqrst"), s, 0, 19);
  135. test(S("abcdefghijklmnopqrst"), s, 0, 20);
  136. test(S("abcdefghijklmnopqrst"), s, 0, 21);
  137. test(S("abcdefghijklmnopqrst"), s, 1, 0);
  138. test(S("abcdefghijklmnopqrst"), s, 1, 1);
  139. test(S("abcdefghijklmnopqrst"), s, 1, 2);
  140. test(S("abcdefghijklmnopqrst"), s, 1, 9);
  141. test(S("abcdefghijklmnopqrst"), s, 1, 18);
  142. test(S("abcdefghijklmnopqrst"), s, 1, 19);
  143. test(S("abcdefghijklmnopqrst"), s, 1, 20);
  144. test(S("abcdefghijklmnopqrst"), s, 2, 0);
  145. test(S("abcdefghijklmnopqrst"), s, 2, 1);
  146. test(S("abcdefghijklmnopqrst"), s, 2, 2);
  147. test(S("abcdefghijklmnopqrst"), s, 2, 9);
  148. test(S("abcdefghijklmnopqrst"), s, 2, 17);
  149. test(S("abcdefghijklmnopqrst"), s, 2, 18);
  150. test(S("abcdefghijklmnopqrst"), s, 2, 19);
  151. test(S("abcdefghijklmnopqrst"), s, 10, 0);
  152. test(S("abcdefghijklmnopqrst"), s, 10, 1);
  153. test(S("abcdefghijklmnopqrst"), s, 10, 2);
  154. test(S("abcdefghijklmnopqrst"), s, 10, 5);
  155. test(S("abcdefghijklmnopqrst"), s, 10, 9);
  156. test(S("abcdefghijklmnopqrst"), s, 10, 10);
  157. test(S("abcdefghijklmnopqrst"), s, 10, 11);
  158. test(S("abcdefghijklmnopqrst"), s, 19, 0);
  159. test(S("abcdefghijklmnopqrst"), s, 19, 1);
  160. test(S("abcdefghijklmnopqrst"), s, 19, 2);
  161. test(S("abcdefghijklmnopqrst"), s, 20, 0);
  162. test(S("abcdefghijklmnopqrst"), s, 20, 1);
  163. test(S("abcdefghijklmnopqrst"), s, 21, 0);
  164. }
  165. #endif
  166. }