size_pointer.pass.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <string>
  10. // basic_string<charT,traits,Allocator>&
  11. // insert(size_type pos, const charT* s);
  12. #include <string>
  13. #include <stdexcept>
  14. #include <cassert>
  15. template <class S>
  16. void
  17. test(S s, typename S::size_type pos, const typename S::value_type* str, S expected)
  18. {
  19. typename S::size_type old_size = s.size();
  20. S s0 = s;
  21. try
  22. {
  23. s.insert(pos, str);
  24. assert(s.__invariants());
  25. assert(pos <= old_size);
  26. assert(s == expected);
  27. }
  28. catch (std::out_of_range&)
  29. {
  30. assert(pos > old_size);
  31. assert(s == s0);
  32. }
  33. }
  34. int main()
  35. {
  36. typedef std::string S;
  37. test(S(""), 0, "", S(""));
  38. test(S(""), 0, "12345", S("12345"));
  39. test(S(""), 0, "1234567890", S("1234567890"));
  40. test(S(""), 0, "12345678901234567890", S("12345678901234567890"));
  41. test(S(""), 1, "", S("can't happen"));
  42. test(S(""), 1, "12345", S("can't happen"));
  43. test(S(""), 1, "1234567890", S("can't happen"));
  44. test(S(""), 1, "12345678901234567890", S("can't happen"));
  45. test(S("abcde"), 0, "", S("abcde"));
  46. test(S("abcde"), 0, "12345", S("12345abcde"));
  47. test(S("abcde"), 0, "1234567890", S("1234567890abcde"));
  48. test(S("abcde"), 0, "12345678901234567890", S("12345678901234567890abcde"));
  49. test(S("abcde"), 1, "", S("abcde"));
  50. test(S("abcde"), 1, "12345", S("a12345bcde"));
  51. test(S("abcde"), 1, "1234567890", S("a1234567890bcde"));
  52. test(S("abcde"), 1, "12345678901234567890", S("a12345678901234567890bcde"));
  53. test(S("abcde"), 2, "", S("abcde"));
  54. test(S("abcde"), 2, "12345", S("ab12345cde"));
  55. test(S("abcde"), 2, "1234567890", S("ab1234567890cde"));
  56. test(S("abcde"), 2, "12345678901234567890", S("ab12345678901234567890cde"));
  57. test(S("abcde"), 4, "", S("abcde"));
  58. test(S("abcde"), 4, "12345", S("abcd12345e"));
  59. test(S("abcde"), 4, "1234567890", S("abcd1234567890e"));
  60. test(S("abcde"), 4, "12345678901234567890", S("abcd12345678901234567890e"));
  61. test(S("abcde"), 5, "", S("abcde"));
  62. test(S("abcde"), 5, "12345", S("abcde12345"));
  63. test(S("abcde"), 5, "1234567890", S("abcde1234567890"));
  64. test(S("abcde"), 5, "12345678901234567890", S("abcde12345678901234567890"));
  65. test(S("abcde"), 6, "", S("can't happen"));
  66. test(S("abcde"), 6, "12345", S("can't happen"));
  67. test(S("abcde"), 6, "1234567890", S("can't happen"));
  68. test(S("abcde"), 6, "12345678901234567890", S("can't happen"));
  69. test(S("abcdefghij"), 0, "", S("abcdefghij"));
  70. test(S("abcdefghij"), 0, "12345", S("12345abcdefghij"));
  71. test(S("abcdefghij"), 0, "1234567890", S("1234567890abcdefghij"));
  72. test(S("abcdefghij"), 0, "12345678901234567890", S("12345678901234567890abcdefghij"));
  73. test(S("abcdefghij"), 1, "", S("abcdefghij"));
  74. test(S("abcdefghij"), 1, "12345", S("a12345bcdefghij"));
  75. test(S("abcdefghij"), 1, "1234567890", S("a1234567890bcdefghij"));
  76. test(S("abcdefghij"), 1, "12345678901234567890", S("a12345678901234567890bcdefghij"));
  77. test(S("abcdefghij"), 5, "", S("abcdefghij"));
  78. test(S("abcdefghij"), 5, "12345", S("abcde12345fghij"));
  79. test(S("abcdefghij"), 5, "1234567890", S("abcde1234567890fghij"));
  80. test(S("abcdefghij"), 5, "12345678901234567890", S("abcde12345678901234567890fghij"));
  81. test(S("abcdefghij"), 9, "", S("abcdefghij"));
  82. test(S("abcdefghij"), 9, "12345", S("abcdefghi12345j"));
  83. test(S("abcdefghij"), 9, "1234567890", S("abcdefghi1234567890j"));
  84. test(S("abcdefghij"), 9, "12345678901234567890", S("abcdefghi12345678901234567890j"));
  85. test(S("abcdefghij"), 10, "", S("abcdefghij"));
  86. test(S("abcdefghij"), 10, "12345", S("abcdefghij12345"));
  87. test(S("abcdefghij"), 10, "1234567890", S("abcdefghij1234567890"));
  88. test(S("abcdefghij"), 10, "12345678901234567890", S("abcdefghij12345678901234567890"));
  89. test(S("abcdefghij"), 11, "", S("can't happen"));
  90. test(S("abcdefghij"), 11, "12345", S("can't happen"));
  91. test(S("abcdefghij"), 11, "1234567890", S("can't happen"));
  92. test(S("abcdefghij"), 11, "12345678901234567890", S("can't happen"));
  93. test(S("abcdefghijklmnopqrst"), 0, "", S("abcdefghijklmnopqrst"));
  94. test(S("abcdefghijklmnopqrst"), 0, "12345", S("12345abcdefghijklmnopqrst"));
  95. test(S("abcdefghijklmnopqrst"), 0, "1234567890", S("1234567890abcdefghijklmnopqrst"));
  96. test(S("abcdefghijklmnopqrst"), 0, "12345678901234567890", S("12345678901234567890abcdefghijklmnopqrst"));
  97. test(S("abcdefghijklmnopqrst"), 1, "", S("abcdefghijklmnopqrst"));
  98. test(S("abcdefghijklmnopqrst"), 1, "12345", S("a12345bcdefghijklmnopqrst"));
  99. test(S("abcdefghijklmnopqrst"), 1, "1234567890", S("a1234567890bcdefghijklmnopqrst"));
  100. test(S("abcdefghijklmnopqrst"), 1, "12345678901234567890", S("a12345678901234567890bcdefghijklmnopqrst"));
  101. test(S("abcdefghijklmnopqrst"), 10, "", S("abcdefghijklmnopqrst"));
  102. test(S("abcdefghijklmnopqrst"), 10, "12345", S("abcdefghij12345klmnopqrst"));
  103. test(S("abcdefghijklmnopqrst"), 10, "1234567890", S("abcdefghij1234567890klmnopqrst"));
  104. test(S("abcdefghijklmnopqrst"), 10, "12345678901234567890", S("abcdefghij12345678901234567890klmnopqrst"));
  105. test(S("abcdefghijklmnopqrst"), 19, "", S("abcdefghijklmnopqrst"));
  106. test(S("abcdefghijklmnopqrst"), 19, "12345", S("abcdefghijklmnopqrs12345t"));
  107. test(S("abcdefghijklmnopqrst"), 19, "1234567890", S("abcdefghijklmnopqrs1234567890t"));
  108. test(S("abcdefghijklmnopqrst"), 19, "12345678901234567890", S("abcdefghijklmnopqrs12345678901234567890t"));
  109. test(S("abcdefghijklmnopqrst"), 20, "", S("abcdefghijklmnopqrst"));
  110. test(S("abcdefghijklmnopqrst"), 20, "12345", S("abcdefghijklmnopqrst12345"));
  111. test(S("abcdefghijklmnopqrst"), 20, "1234567890", S("abcdefghijklmnopqrst1234567890"));
  112. test(S("abcdefghijklmnopqrst"), 20, "12345678901234567890", S("abcdefghijklmnopqrst12345678901234567890"));
  113. test(S("abcdefghijklmnopqrst"), 21, "", S("can't happen"));
  114. test(S("abcdefghijklmnopqrst"), 21, "12345", S("can't happen"));
  115. test(S("abcdefghijklmnopqrst"), 21, "1234567890", S("can't happen"));
  116. test(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", S("can't happen"));
  117. }