iterator.pass.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. // <string>
  10. // template<class InputIterator>
  11. // basic_string& assign(InputIterator first, InputIterator last);
  12. #include <string>
  13. #include <cassert>
  14. #include "../../input_iterator.h"
  15. #include "min_allocator.h"
  16. template <class S, class It>
  17. void
  18. test(S s, It first, It last, S expected)
  19. {
  20. s.assign(first, last);
  21. assert(s.__invariants());
  22. assert(s == expected);
  23. }
  24. int main()
  25. {
  26. {
  27. typedef std::string S;
  28. const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  29. test(S(), s, s, S());
  30. test(S(), s, s+1, S("A"));
  31. test(S(), s, s+10, S("ABCDEFGHIJ"));
  32. test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  33. test(S("12345"), s, s, S());
  34. test(S("12345"), s, s+1, S("A"));
  35. test(S("12345"), s, s+10, S("ABCDEFGHIJ"));
  36. test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  37. test(S("1234567890"), s, s, S());
  38. test(S("1234567890"), s, s+1, S("A"));
  39. test(S("1234567890"), s, s+10, S("ABCDEFGHIJ"));
  40. test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  41. test(S("12345678901234567890"), s, s, S());
  42. test(S("12345678901234567890"), s, s+1, S("A"));
  43. test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ"));
  44. test(S("12345678901234567890"), s, s+52,
  45. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  46. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s), S());
  47. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+1), S("A"));
  48. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  49. S("ABCDEFGHIJ"));
  50. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  51. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  52. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s),
  53. S());
  54. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
  55. S("A"));
  56. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  57. S("ABCDEFGHIJ"));
  58. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  59. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  60. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
  61. S());
  62. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
  63. S("A"));
  64. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  65. S("ABCDEFGHIJ"));
  66. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  67. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  68. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
  69. S());
  70. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
  71. S("A"));
  72. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  73. S("ABCDEFGHIJ"));
  74. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  75. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  76. }
  77. #if __cplusplus >= 201103L
  78. {
  79. typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
  80. const char* s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  81. test(S(), s, s, S());
  82. test(S(), s, s+1, S("A"));
  83. test(S(), s, s+10, S("ABCDEFGHIJ"));
  84. test(S(), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  85. test(S("12345"), s, s, S());
  86. test(S("12345"), s, s+1, S("A"));
  87. test(S("12345"), s, s+10, S("ABCDEFGHIJ"));
  88. test(S("12345"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  89. test(S("1234567890"), s, s, S());
  90. test(S("1234567890"), s, s+1, S("A"));
  91. test(S("1234567890"), s, s+10, S("ABCDEFGHIJ"));
  92. test(S("1234567890"), s, s+52, S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  93. test(S("12345678901234567890"), s, s, S());
  94. test(S("12345678901234567890"), s, s+1, S("A"));
  95. test(S("12345678901234567890"), s, s+10, S("ABCDEFGHIJ"));
  96. test(S("12345678901234567890"), s, s+52,
  97. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  98. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s), S());
  99. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+1), S("A"));
  100. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  101. S("ABCDEFGHIJ"));
  102. test(S(), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  103. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  104. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s),
  105. S());
  106. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
  107. S("A"));
  108. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  109. S("ABCDEFGHIJ"));
  110. test(S("12345"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  111. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  112. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
  113. S());
  114. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
  115. S("A"));
  116. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  117. S("ABCDEFGHIJ"));
  118. test(S("1234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  119. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  120. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s),
  121. S());
  122. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+1),
  123. S("A"));
  124. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+10),
  125. S("ABCDEFGHIJ"));
  126. test(S("12345678901234567890"), input_iterator<const char*>(s), input_iterator<const char*>(s+52),
  127. S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
  128. }
  129. #endif
  130. }