iter_iter_iter_iter.pass.cpp 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952
  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&
  12. // replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2);
  13. #include <string>
  14. #include <iterator>
  15. #include <cassert>
  16. #include <stdio.h>
  17. template <class S, class It>
  18. void
  19. test(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l, S expected)
  20. {
  21. typename S::size_type old_size = s.size();
  22. typename S::const_iterator first = s.begin() + pos1;
  23. typename S::const_iterator last = s.begin() + pos1 + n1;
  24. s.replace(first, last, f, l);
  25. assert(s.__invariants());
  26. assert(s == expected);
  27. typename S::size_type xlen = last - first;
  28. typename S::size_type rlen = std::distance(f, l);
  29. assert(s.size() == old_size - xlen + rlen);
  30. }
  31. typedef std::string S;
  32. const char* str = "12345678901234567890";
  33. void test0()
  34. {
  35. test(S(""), 0, 0, str, str+0, S(""));
  36. test(S(""), 0, 0, str, str+0, S(""));
  37. test(S(""), 0, 0, str, str+1, S("1"));
  38. test(S(""), 0, 0, str, str+2, S("12"));
  39. test(S(""), 0, 0, str, str+4, S("1234"));
  40. test(S(""), 0, 0, str, str+5, S("12345"));
  41. test(S(""), 0, 0, str, str+0, S(""));
  42. test(S(""), 0, 0, str, str+1, S("1"));
  43. test(S(""), 0, 0, str, str+5, S("12345"));
  44. test(S(""), 0, 0, str, str+9, S("123456789"));
  45. test(S(""), 0, 0, str, str+10, S("1234567890"));
  46. test(S(""), 0, 0, str, str+0, S(""));
  47. test(S(""), 0, 0, str, str+1, S("1"));
  48. test(S(""), 0, 0, str, str+10, S("1234567890"));
  49. test(S(""), 0, 0, str, str+19, S("1234567890123456789"));
  50. test(S(""), 0, 0, str, str+20, S("12345678901234567890"));
  51. test(S("abcde"), 0, 0, str, str+0, S("abcde"));
  52. test(S("abcde"), 0, 0, str, str+0, S("abcde"));
  53. test(S("abcde"), 0, 0, str, str+1, S("1abcde"));
  54. test(S("abcde"), 0, 0, str, str+2, S("12abcde"));
  55. test(S("abcde"), 0, 0, str, str+4, S("1234abcde"));
  56. test(S("abcde"), 0, 0, str, str+5, S("12345abcde"));
  57. test(S("abcde"), 0, 0, str, str+0, S("abcde"));
  58. test(S("abcde"), 0, 0, str, str+1, S("1abcde"));
  59. test(S("abcde"), 0, 0, str, str+5, S("12345abcde"));
  60. test(S("abcde"), 0, 0, str, str+9, S("123456789abcde"));
  61. test(S("abcde"), 0, 0, str, str+10, S("1234567890abcde"));
  62. test(S("abcde"), 0, 0, str, str+0, S("abcde"));
  63. test(S("abcde"), 0, 0, str, str+1, S("1abcde"));
  64. test(S("abcde"), 0, 0, str, str+10, S("1234567890abcde"));
  65. test(S("abcde"), 0, 0, str, str+19, S("1234567890123456789abcde"));
  66. test(S("abcde"), 0, 0, str, str+20, S("12345678901234567890abcde"));
  67. test(S("abcde"), 0, 1, str, str+0, S("bcde"));
  68. test(S("abcde"), 0, 1, str, str+0, S("bcde"));
  69. test(S("abcde"), 0, 1, str, str+1, S("1bcde"));
  70. test(S("abcde"), 0, 1, str, str+2, S("12bcde"));
  71. test(S("abcde"), 0, 1, str, str+4, S("1234bcde"));
  72. test(S("abcde"), 0, 1, str, str+5, S("12345bcde"));
  73. test(S("abcde"), 0, 1, str, str+0, S("bcde"));
  74. test(S("abcde"), 0, 1, str, str+1, S("1bcde"));
  75. test(S("abcde"), 0, 1, str, str+5, S("12345bcde"));
  76. test(S("abcde"), 0, 1, str, str+9, S("123456789bcde"));
  77. test(S("abcde"), 0, 1, str, str+10, S("1234567890bcde"));
  78. test(S("abcde"), 0, 1, str, str+0, S("bcde"));
  79. test(S("abcde"), 0, 1, str, str+1, S("1bcde"));
  80. test(S("abcde"), 0, 1, str, str+10, S("1234567890bcde"));
  81. test(S("abcde"), 0, 1, str, str+19, S("1234567890123456789bcde"));
  82. test(S("abcde"), 0, 1, str, str+20, S("12345678901234567890bcde"));
  83. test(S("abcde"), 0, 2, str, str+0, S("cde"));
  84. test(S("abcde"), 0, 2, str, str+0, S("cde"));
  85. test(S("abcde"), 0, 2, str, str+1, S("1cde"));
  86. test(S("abcde"), 0, 2, str, str+2, S("12cde"));
  87. test(S("abcde"), 0, 2, str, str+4, S("1234cde"));
  88. test(S("abcde"), 0, 2, str, str+5, S("12345cde"));
  89. test(S("abcde"), 0, 2, str, str+0, S("cde"));
  90. test(S("abcde"), 0, 2, str, str+1, S("1cde"));
  91. test(S("abcde"), 0, 2, str, str+5, S("12345cde"));
  92. test(S("abcde"), 0, 2, str, str+9, S("123456789cde"));
  93. test(S("abcde"), 0, 2, str, str+10, S("1234567890cde"));
  94. test(S("abcde"), 0, 2, str, str+0, S("cde"));
  95. test(S("abcde"), 0, 2, str, str+1, S("1cde"));
  96. test(S("abcde"), 0, 2, str, str+10, S("1234567890cde"));
  97. test(S("abcde"), 0, 2, str, str+19, S("1234567890123456789cde"));
  98. test(S("abcde"), 0, 2, str, str+20, S("12345678901234567890cde"));
  99. test(S("abcde"), 0, 4, str, str+0, S("e"));
  100. test(S("abcde"), 0, 4, str, str+0, S("e"));
  101. test(S("abcde"), 0, 4, str, str+1, S("1e"));
  102. test(S("abcde"), 0, 4, str, str+2, S("12e"));
  103. test(S("abcde"), 0, 4, str, str+4, S("1234e"));
  104. test(S("abcde"), 0, 4, str, str+5, S("12345e"));
  105. test(S("abcde"), 0, 4, str, str+0, S("e"));
  106. test(S("abcde"), 0, 4, str, str+1, S("1e"));
  107. test(S("abcde"), 0, 4, str, str+5, S("12345e"));
  108. test(S("abcde"), 0, 4, str, str+9, S("123456789e"));
  109. test(S("abcde"), 0, 4, str, str+10, S("1234567890e"));
  110. test(S("abcde"), 0, 4, str, str+0, S("e"));
  111. test(S("abcde"), 0, 4, str, str+1, S("1e"));
  112. test(S("abcde"), 0, 4, str, str+10, S("1234567890e"));
  113. test(S("abcde"), 0, 4, str, str+19, S("1234567890123456789e"));
  114. // test(S("abcde"), 0, 4, str, str+20, S("12345678901234567890e"));
  115. // test(S("abcde"), 0, 5, str, str+0, S(""));
  116. // test(S("abcde"), 0, 5, str, str+0, S(""));
  117. // test(S("abcde"), 0, 5, str, str+1, S("1"));
  118. // test(S("abcde"), 0, 5, str, str+2, S("12"));
  119. // test(S("abcde"), 0, 5, str, str+4, S("1234"));
  120. // test(S("abcde"), 0, 5, str, str+5, S("12345"));
  121. // test(S("abcde"), 0, 5, str, str+0, S(""));
  122. // test(S("abcde"), 0, 5, str, str+1, S("1"));
  123. // test(S("abcde"), 0, 5, str, str+5, S("12345"));
  124. // test(S("abcde"), 0, 5, str, str+9, S("123456789"));
  125. // test(S("abcde"), 0, 5, str, str+10, S("1234567890"));
  126. // test(S("abcde"), 0, 5, str, str+0, S(""));
  127. // test(S("abcde"), 0, 5, str, str+1, S("1"));
  128. // test(S("abcde"), 0, 5, str, str+10, S("1234567890"));
  129. // test(S("abcde"), 0, 5, str, str+19, S("1234567890123456789"));
  130. // test(S("abcde"), 0, 5, str, str+20, S("12345678901234567890"));
  131. // test(S("abcde"), 1, 0, str, str+0, S("abcde"));
  132. // test(S("abcde"), 1, 0, str, str+0, S("abcde"));
  133. // test(S("abcde"), 1, 0, str, str+1, S("a1bcde"));
  134. // test(S("abcde"), 1, 0, str, str+2, S("a12bcde"));
  135. }
  136. /*
  137. void test1()
  138. {
  139. test(S("abcde"), 1, 0, str, str+4, S("a1234bcde"));
  140. test(S("abcde"), 1, 0, str, str+5, S("a12345bcde"));
  141. test(S("abcde"), 1, 0, str, str+0, S("abcde"));
  142. test(S("abcde"), 1, 0, str, str+1, S("a1bcde"));
  143. test(S("abcde"), 1, 0, str, str+5, S("a12345bcde"));
  144. test(S("abcde"), 1, 0, str, str+9, S("a123456789bcde"));
  145. test(S("abcde"), 1, 0, str, str+10, S("a1234567890bcde"));
  146. test(S("abcde"), 1, 0, str, str+0, S("abcde"));
  147. test(S("abcde"), 1, 0, str, str+1, S("a1bcde"));
  148. test(S("abcde"), 1, 0, str, str+10, S("a1234567890bcde"));
  149. test(S("abcde"), 1, 0, str, str+19, S("a1234567890123456789bcde"));
  150. test(S("abcde"), 1, 0, str, str+20, S("a12345678901234567890bcde"));
  151. test(S("abcde"), 1, 1, str, str+0, S("acde"));
  152. test(S("abcde"), 1, 1, str, str+0, S("acde"));
  153. test(S("abcde"), 1, 1, str, str+1, S("a1cde"));
  154. test(S("abcde"), 1, 1, str, str+2, S("a12cde"));
  155. test(S("abcde"), 1, 1, str, str+4, S("a1234cde"));
  156. test(S("abcde"), 1, 1, str, str+5, S("a12345cde"));
  157. test(S("abcde"), 1, 1, str, str+0, S("acde"));
  158. test(S("abcde"), 1, 1, str, str+1, S("a1cde"));
  159. test(S("abcde"), 1, 1, str, str+5, S("a12345cde"));
  160. test(S("abcde"), 1, 1, str, str+9, S("a123456789cde"));
  161. test(S("abcde"), 1, 1, str, str+10, S("a1234567890cde"));
  162. test(S("abcde"), 1, 1, str, str+0, S("acde"));
  163. test(S("abcde"), 1, 1, str, str+1, S("a1cde"));
  164. test(S("abcde"), 1, 1, str, str+10, S("a1234567890cde"));
  165. test(S("abcde"), 1, 1, str, str+19, S("a1234567890123456789cde"));
  166. test(S("abcde"), 1, 1, str, str+20, S("a12345678901234567890cde"));
  167. test(S("abcde"), 1, 2, str, str+0, S("ade"));
  168. test(S("abcde"), 1, 2, str, str+0, S("ade"));
  169. test(S("abcde"), 1, 2, str, str+1, S("a1de"));
  170. test(S("abcde"), 1, 2, str, str+2, S("a12de"));
  171. test(S("abcde"), 1, 2, str, str+4, S("a1234de"));
  172. test(S("abcde"), 1, 2, str, str+5, S("a12345de"));
  173. test(S("abcde"), 1, 2, str, str+0, S("ade"));
  174. test(S("abcde"), 1, 2, str, str+1, S("a1de"));
  175. test(S("abcde"), 1, 2, str, str+5, S("a12345de"));
  176. test(S("abcde"), 1, 2, str, str+9, S("a123456789de"));
  177. test(S("abcde"), 1, 2, str, str+10, S("a1234567890de"));
  178. test(S("abcde"), 1, 2, str, str+0, S("ade"));
  179. test(S("abcde"), 1, 2, str, str+1, S("a1de"));
  180. test(S("abcde"), 1, 2, str, str+10, S("a1234567890de"));
  181. test(S("abcde"), 1, 2, str, str+19, S("a1234567890123456789de"));
  182. test(S("abcde"), 1, 2, str, str+20, S("a12345678901234567890de"));
  183. test(S("abcde"), 1, 3, str, str+0, S("ae"));
  184. test(S("abcde"), 1, 3, str, str+0, S("ae"));
  185. test(S("abcde"), 1, 3, str, str+1, S("a1e"));
  186. test(S("abcde"), 1, 3, str, str+2, S("a12e"));
  187. test(S("abcde"), 1, 3, str, str+4, S("a1234e"));
  188. test(S("abcde"), 1, 3, str, str+5, S("a12345e"));
  189. test(S("abcde"), 1, 3, str, str+0, S("ae"));
  190. test(S("abcde"), 1, 3, str, str+1, S("a1e"));
  191. test(S("abcde"), 1, 3, str, str+5, S("a12345e"));
  192. test(S("abcde"), 1, 3, str, str+9, S("a123456789e"));
  193. test(S("abcde"), 1, 3, str, str+10, S("a1234567890e"));
  194. test(S("abcde"), 1, 3, str, str+0, S("ae"));
  195. test(S("abcde"), 1, 3, str, str+1, S("a1e"));
  196. test(S("abcde"), 1, 3, str, str+10, S("a1234567890e"));
  197. test(S("abcde"), 1, 3, str, str+19, S("a1234567890123456789e"));
  198. test(S("abcde"), 1, 3, str, str+20, S("a12345678901234567890e"));
  199. test(S("abcde"), 1, 4, str, str+0, S("a"));
  200. test(S("abcde"), 1, 4, str, str+0, S("a"));
  201. test(S("abcde"), 1, 4, str, str+1, S("a1"));
  202. test(S("abcde"), 1, 4, str, str+2, S("a12"));
  203. test(S("abcde"), 1, 4, str, str+4, S("a1234"));
  204. test(S("abcde"), 1, 4, str, str+5, S("a12345"));
  205. test(S("abcde"), 1, 4, str, str+0, S("a"));
  206. test(S("abcde"), 1, 4, str, str+1, S("a1"));
  207. test(S("abcde"), 1, 4, str, str+5, S("a12345"));
  208. test(S("abcde"), 1, 4, str, str+9, S("a123456789"));
  209. test(S("abcde"), 1, 4, str, str+10, S("a1234567890"));
  210. test(S("abcde"), 1, 4, str, str+0, S("a"));
  211. test(S("abcde"), 1, 4, str, str+1, S("a1"));
  212. test(S("abcde"), 1, 4, str, str+10, S("a1234567890"));
  213. test(S("abcde"), 1, 4, str, str+19, S("a1234567890123456789"));
  214. test(S("abcde"), 1, 4, str, str+20, S("a12345678901234567890"));
  215. test(S("abcde"), 2, 0, str, str+0, S("abcde"));
  216. test(S("abcde"), 2, 0, str, str+0, S("abcde"));
  217. test(S("abcde"), 2, 0, str, str+1, S("ab1cde"));
  218. test(S("abcde"), 2, 0, str, str+2, S("ab12cde"));
  219. test(S("abcde"), 2, 0, str, str+4, S("ab1234cde"));
  220. test(S("abcde"), 2, 0, str, str+5, S("ab12345cde"));
  221. test(S("abcde"), 2, 0, str, str+0, S("abcde"));
  222. test(S("abcde"), 2, 0, str, str+1, S("ab1cde"));
  223. test(S("abcde"), 2, 0, str, str+5, S("ab12345cde"));
  224. test(S("abcde"), 2, 0, str, str+9, S("ab123456789cde"));
  225. test(S("abcde"), 2, 0, str, str+10, S("ab1234567890cde"));
  226. test(S("abcde"), 2, 0, str, str+0, S("abcde"));
  227. test(S("abcde"), 2, 0, str, str+1, S("ab1cde"));
  228. test(S("abcde"), 2, 0, str, str+10, S("ab1234567890cde"));
  229. test(S("abcde"), 2, 0, str, str+19, S("ab1234567890123456789cde"));
  230. test(S("abcde"), 2, 0, str, str+20, S("ab12345678901234567890cde"));
  231. test(S("abcde"), 2, 1, str, str+0, S("abde"));
  232. test(S("abcde"), 2, 1, str, str+0, S("abde"));
  233. test(S("abcde"), 2, 1, str, str+1, S("ab1de"));
  234. test(S("abcde"), 2, 1, str, str+2, S("ab12de"));
  235. test(S("abcde"), 2, 1, str, str+4, S("ab1234de"));
  236. test(S("abcde"), 2, 1, str, str+5, S("ab12345de"));
  237. test(S("abcde"), 2, 1, str, str+0, S("abde"));
  238. test(S("abcde"), 2, 1, str, str+1, S("ab1de"));
  239. }
  240. void test2()
  241. {
  242. test(S("abcde"), 2, 1, str, str+5, S("ab12345de"));
  243. test(S("abcde"), 2, 1, str, str+9, S("ab123456789de"));
  244. test(S("abcde"), 2, 1, str, str+10, S("ab1234567890de"));
  245. test(S("abcde"), 2, 1, str, str+0, S("abde"));
  246. test(S("abcde"), 2, 1, str, str+1, S("ab1de"));
  247. test(S("abcde"), 2, 1, str, str+10, S("ab1234567890de"));
  248. test(S("abcde"), 2, 1, str, str+19, S("ab1234567890123456789de"));
  249. test(S("abcde"), 2, 1, str, str+20, S("ab12345678901234567890de"));
  250. test(S("abcde"), 2, 2, str, str+0, S("abe"));
  251. test(S("abcde"), 2, 2, str, str+0, S("abe"));
  252. test(S("abcde"), 2, 2, str, str+1, S("ab1e"));
  253. test(S("abcde"), 2, 2, str, str+2, S("ab12e"));
  254. test(S("abcde"), 2, 2, str, str+4, S("ab1234e"));
  255. test(S("abcde"), 2, 2, str, str+5, S("ab12345e"));
  256. test(S("abcde"), 2, 2, str, str+0, S("abe"));
  257. test(S("abcde"), 2, 2, str, str+1, S("ab1e"));
  258. test(S("abcde"), 2, 2, str, str+5, S("ab12345e"));
  259. test(S("abcde"), 2, 2, str, str+9, S("ab123456789e"));
  260. test(S("abcde"), 2, 2, str, str+10, S("ab1234567890e"));
  261. test(S("abcde"), 2, 2, str, str+0, S("abe"));
  262. test(S("abcde"), 2, 2, str, str+1, S("ab1e"));
  263. test(S("abcde"), 2, 2, str, str+10, S("ab1234567890e"));
  264. test(S("abcde"), 2, 2, str, str+19, S("ab1234567890123456789e"));
  265. test(S("abcde"), 2, 2, str, str+20, S("ab12345678901234567890e"));
  266. test(S("abcde"), 2, 3, str, str+0, S("ab"));
  267. test(S("abcde"), 2, 3, str, str+0, S("ab"));
  268. test(S("abcde"), 2, 3, str, str+1, S("ab1"));
  269. test(S("abcde"), 2, 3, str, str+2, S("ab12"));
  270. test(S("abcde"), 2, 3, str, str+4, S("ab1234"));
  271. test(S("abcde"), 2, 3, str, str+5, S("ab12345"));
  272. test(S("abcde"), 2, 3, str, str+0, S("ab"));
  273. test(S("abcde"), 2, 3, str, str+1, S("ab1"));
  274. test(S("abcde"), 2, 3, str, str+5, S("ab12345"));
  275. test(S("abcde"), 2, 3, str, str+9, S("ab123456789"));
  276. test(S("abcde"), 2, 3, str, str+10, S("ab1234567890"));
  277. test(S("abcde"), 2, 3, str, str+0, S("ab"));
  278. test(S("abcde"), 2, 3, str, str+1, S("ab1"));
  279. test(S("abcde"), 2, 3, str, str+10, S("ab1234567890"));
  280. test(S("abcde"), 2, 3, str, str+19, S("ab1234567890123456789"));
  281. test(S("abcde"), 2, 3, str, str+20, S("ab12345678901234567890"));
  282. test(S("abcde"), 4, 0, str, str+0, S("abcde"));
  283. test(S("abcde"), 4, 0, str, str+0, S("abcde"));
  284. test(S("abcde"), 4, 0, str, str+1, S("abcd1e"));
  285. test(S("abcde"), 4, 0, str, str+2, S("abcd12e"));
  286. test(S("abcde"), 4, 0, str, str+4, S("abcd1234e"));
  287. test(S("abcde"), 4, 0, str, str+5, S("abcd12345e"));
  288. test(S("abcde"), 4, 0, str, str+0, S("abcde"));
  289. test(S("abcde"), 4, 0, str, str+1, S("abcd1e"));
  290. test(S("abcde"), 4, 0, str, str+5, S("abcd12345e"));
  291. test(S("abcde"), 4, 0, str, str+9, S("abcd123456789e"));
  292. test(S("abcde"), 4, 0, str, str+10, S("abcd1234567890e"));
  293. test(S("abcde"), 4, 0, str, str+0, S("abcde"));
  294. test(S("abcde"), 4, 0, str, str+1, S("abcd1e"));
  295. test(S("abcde"), 4, 0, str, str+10, S("abcd1234567890e"));
  296. test(S("abcde"), 4, 0, str, str+19, S("abcd1234567890123456789e"));
  297. test(S("abcde"), 4, 0, str, str+20, S("abcd12345678901234567890e"));
  298. test(S("abcde"), 4, 1, str, str+0, S("abcd"));
  299. test(S("abcde"), 4, 1, str, str+0, S("abcd"));
  300. test(S("abcde"), 4, 1, str, str+1, S("abcd1"));
  301. test(S("abcde"), 4, 1, str, str+2, S("abcd12"));
  302. test(S("abcde"), 4, 1, str, str+4, S("abcd1234"));
  303. test(S("abcde"), 4, 1, str, str+5, S("abcd12345"));
  304. test(S("abcde"), 4, 1, str, str+0, S("abcd"));
  305. test(S("abcde"), 4, 1, str, str+1, S("abcd1"));
  306. test(S("abcde"), 4, 1, str, str+5, S("abcd12345"));
  307. test(S("abcde"), 4, 1, str, str+9, S("abcd123456789"));
  308. test(S("abcde"), 4, 1, str, str+10, S("abcd1234567890"));
  309. test(S("abcde"), 4, 1, str, str+0, S("abcd"));
  310. test(S("abcde"), 4, 1, str, str+1, S("abcd1"));
  311. test(S("abcde"), 4, 1, str, str+10, S("abcd1234567890"));
  312. test(S("abcde"), 4, 1, str, str+19, S("abcd1234567890123456789"));
  313. test(S("abcde"), 4, 1, str, str+20, S("abcd12345678901234567890"));
  314. test(S("abcde"), 5, 0, str, str+0, S("abcde"));
  315. test(S("abcde"), 5, 0, str, str+0, S("abcde"));
  316. test(S("abcde"), 5, 0, str, str+1, S("abcde1"));
  317. test(S("abcde"), 5, 0, str, str+2, S("abcde12"));
  318. test(S("abcde"), 5, 0, str, str+4, S("abcde1234"));
  319. test(S("abcde"), 5, 0, str, str+5, S("abcde12345"));
  320. test(S("abcde"), 5, 0, str, str+0, S("abcde"));
  321. test(S("abcde"), 5, 0, str, str+1, S("abcde1"));
  322. test(S("abcde"), 5, 0, str, str+5, S("abcde12345"));
  323. test(S("abcde"), 5, 0, str, str+9, S("abcde123456789"));
  324. test(S("abcde"), 5, 0, str, str+10, S("abcde1234567890"));
  325. test(S("abcde"), 5, 0, str, str+0, S("abcde"));
  326. test(S("abcde"), 5, 0, str, str+1, S("abcde1"));
  327. test(S("abcde"), 5, 0, str, str+10, S("abcde1234567890"));
  328. test(S("abcde"), 5, 0, str, str+19, S("abcde1234567890123456789"));
  329. test(S("abcde"), 5, 0, str, str+20, S("abcde12345678901234567890"));
  330. test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
  331. test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
  332. test(S("abcdefghij"), 0, 0, str, str+1, S("1abcdefghij"));
  333. test(S("abcdefghij"), 0, 0, str, str+2, S("12abcdefghij"));
  334. test(S("abcdefghij"), 0, 0, str, str+4, S("1234abcdefghij"));
  335. test(S("abcdefghij"), 0, 0, str, str+5, S("12345abcdefghij"));
  336. test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
  337. test(S("abcdefghij"), 0, 0, str, str+1, S("1abcdefghij"));
  338. test(S("abcdefghij"), 0, 0, str, str+5, S("12345abcdefghij"));
  339. test(S("abcdefghij"), 0, 0, str, str+9, S("123456789abcdefghij"));
  340. test(S("abcdefghij"), 0, 0, str, str+10, S("1234567890abcdefghij"));
  341. test(S("abcdefghij"), 0, 0, str, str+0, S("abcdefghij"));
  342. }
  343. void test3()
  344. {
  345. test(S("abcdefghij"), 0, 0, str, str+1, S("1abcdefghij"));
  346. test(S("abcdefghij"), 0, 0, str, str+10, S("1234567890abcdefghij"));
  347. test(S("abcdefghij"), 0, 0, str, str+19, S("1234567890123456789abcdefghij"));
  348. test(S("abcdefghij"), 0, 0, str, str+20, S("12345678901234567890abcdefghij"));
  349. test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
  350. test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
  351. test(S("abcdefghij"), 0, 1, str, str+1, S("1bcdefghij"));
  352. test(S("abcdefghij"), 0, 1, str, str+2, S("12bcdefghij"));
  353. test(S("abcdefghij"), 0, 1, str, str+4, S("1234bcdefghij"));
  354. test(S("abcdefghij"), 0, 1, str, str+5, S("12345bcdefghij"));
  355. test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
  356. test(S("abcdefghij"), 0, 1, str, str+1, S("1bcdefghij"));
  357. test(S("abcdefghij"), 0, 1, str, str+5, S("12345bcdefghij"));
  358. test(S("abcdefghij"), 0, 1, str, str+9, S("123456789bcdefghij"));
  359. test(S("abcdefghij"), 0, 1, str, str+10, S("1234567890bcdefghij"));
  360. test(S("abcdefghij"), 0, 1, str, str+0, S("bcdefghij"));
  361. test(S("abcdefghij"), 0, 1, str, str+1, S("1bcdefghij"));
  362. test(S("abcdefghij"), 0, 1, str, str+10, S("1234567890bcdefghij"));
  363. test(S("abcdefghij"), 0, 1, str, str+19, S("1234567890123456789bcdefghij"));
  364. test(S("abcdefghij"), 0, 1, str, str+20, S("12345678901234567890bcdefghij"));
  365. test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
  366. test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
  367. test(S("abcdefghij"), 0, 5, str, str+1, S("1fghij"));
  368. test(S("abcdefghij"), 0, 5, str, str+2, S("12fghij"));
  369. test(S("abcdefghij"), 0, 5, str, str+4, S("1234fghij"));
  370. test(S("abcdefghij"), 0, 5, str, str+5, S("12345fghij"));
  371. test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
  372. test(S("abcdefghij"), 0, 5, str, str+1, S("1fghij"));
  373. test(S("abcdefghij"), 0, 5, str, str+5, S("12345fghij"));
  374. test(S("abcdefghij"), 0, 5, str, str+9, S("123456789fghij"));
  375. test(S("abcdefghij"), 0, 5, str, str+10, S("1234567890fghij"));
  376. test(S("abcdefghij"), 0, 5, str, str+0, S("fghij"));
  377. test(S("abcdefghij"), 0, 5, str, str+1, S("1fghij"));
  378. test(S("abcdefghij"), 0, 5, str, str+10, S("1234567890fghij"));
  379. test(S("abcdefghij"), 0, 5, str, str+19, S("1234567890123456789fghij"));
  380. test(S("abcdefghij"), 0, 5, str, str+20, S("12345678901234567890fghij"));
  381. test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
  382. test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
  383. test(S("abcdefghij"), 0, 9, str, str+1, S("1j"));
  384. test(S("abcdefghij"), 0, 9, str, str+2, S("12j"));
  385. test(S("abcdefghij"), 0, 9, str, str+4, S("1234j"));
  386. test(S("abcdefghij"), 0, 9, str, str+5, S("12345j"));
  387. test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
  388. test(S("abcdefghij"), 0, 9, str, str+1, S("1j"));
  389. test(S("abcdefghij"), 0, 9, str, str+5, S("12345j"));
  390. test(S("abcdefghij"), 0, 9, str, str+9, S("123456789j"));
  391. test(S("abcdefghij"), 0, 9, str, str+10, S("1234567890j"));
  392. test(S("abcdefghij"), 0, 9, str, str+0, S("j"));
  393. test(S("abcdefghij"), 0, 9, str, str+1, S("1j"));
  394. test(S("abcdefghij"), 0, 9, str, str+10, S("1234567890j"));
  395. test(S("abcdefghij"), 0, 9, str, str+19, S("1234567890123456789j"));
  396. test(S("abcdefghij"), 0, 9, str, str+20, S("12345678901234567890j"));
  397. test(S("abcdefghij"), 0, 10, str, str+0, S(""));
  398. test(S("abcdefghij"), 0, 10, str, str+0, S(""));
  399. test(S("abcdefghij"), 0, 10, str, str+1, S("1"));
  400. test(S("abcdefghij"), 0, 10, str, str+2, S("12"));
  401. test(S("abcdefghij"), 0, 10, str, str+4, S("1234"));
  402. test(S("abcdefghij"), 0, 10, str, str+5, S("12345"));
  403. test(S("abcdefghij"), 0, 10, str, str+0, S(""));
  404. test(S("abcdefghij"), 0, 10, str, str+1, S("1"));
  405. test(S("abcdefghij"), 0, 10, str, str+5, S("12345"));
  406. test(S("abcdefghij"), 0, 10, str, str+9, S("123456789"));
  407. test(S("abcdefghij"), 0, 10, str, str+10, S("1234567890"));
  408. test(S("abcdefghij"), 0, 10, str, str+0, S(""));
  409. test(S("abcdefghij"), 0, 10, str, str+1, S("1"));
  410. test(S("abcdefghij"), 0, 10, str, str+10, S("1234567890"));
  411. test(S("abcdefghij"), 0, 10, str, str+19, S("1234567890123456789"));
  412. test(S("abcdefghij"), 0, 10, str, str+20, S("12345678901234567890"));
  413. test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
  414. test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
  415. test(S("abcdefghij"), 1, 0, str, str+1, S("a1bcdefghij"));
  416. test(S("abcdefghij"), 1, 0, str, str+2, S("a12bcdefghij"));
  417. test(S("abcdefghij"), 1, 0, str, str+4, S("a1234bcdefghij"));
  418. test(S("abcdefghij"), 1, 0, str, str+5, S("a12345bcdefghij"));
  419. test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
  420. test(S("abcdefghij"), 1, 0, str, str+1, S("a1bcdefghij"));
  421. test(S("abcdefghij"), 1, 0, str, str+5, S("a12345bcdefghij"));
  422. test(S("abcdefghij"), 1, 0, str, str+9, S("a123456789bcdefghij"));
  423. test(S("abcdefghij"), 1, 0, str, str+10, S("a1234567890bcdefghij"));
  424. test(S("abcdefghij"), 1, 0, str, str+0, S("abcdefghij"));
  425. test(S("abcdefghij"), 1, 0, str, str+1, S("a1bcdefghij"));
  426. test(S("abcdefghij"), 1, 0, str, str+10, S("a1234567890bcdefghij"));
  427. test(S("abcdefghij"), 1, 0, str, str+19, S("a1234567890123456789bcdefghij"));
  428. test(S("abcdefghij"), 1, 0, str, str+20, S("a12345678901234567890bcdefghij"));
  429. test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
  430. test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
  431. test(S("abcdefghij"), 1, 1, str, str+1, S("a1cdefghij"));
  432. test(S("abcdefghij"), 1, 1, str, str+2, S("a12cdefghij"));
  433. test(S("abcdefghij"), 1, 1, str, str+4, S("a1234cdefghij"));
  434. test(S("abcdefghij"), 1, 1, str, str+5, S("a12345cdefghij"));
  435. test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
  436. test(S("abcdefghij"), 1, 1, str, str+1, S("a1cdefghij"));
  437. test(S("abcdefghij"), 1, 1, str, str+5, S("a12345cdefghij"));
  438. test(S("abcdefghij"), 1, 1, str, str+9, S("a123456789cdefghij"));
  439. test(S("abcdefghij"), 1, 1, str, str+10, S("a1234567890cdefghij"));
  440. test(S("abcdefghij"), 1, 1, str, str+0, S("acdefghij"));
  441. test(S("abcdefghij"), 1, 1, str, str+1, S("a1cdefghij"));
  442. test(S("abcdefghij"), 1, 1, str, str+10, S("a1234567890cdefghij"));
  443. test(S("abcdefghij"), 1, 1, str, str+19, S("a1234567890123456789cdefghij"));
  444. test(S("abcdefghij"), 1, 1, str, str+20, S("a12345678901234567890cdefghij"));
  445. }
  446. void test4()
  447. {
  448. test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
  449. test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
  450. test(S("abcdefghij"), 1, 4, str, str+1, S("a1fghij"));
  451. test(S("abcdefghij"), 1, 4, str, str+2, S("a12fghij"));
  452. test(S("abcdefghij"), 1, 4, str, str+4, S("a1234fghij"));
  453. test(S("abcdefghij"), 1, 4, str, str+5, S("a12345fghij"));
  454. test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
  455. test(S("abcdefghij"), 1, 4, str, str+1, S("a1fghij"));
  456. test(S("abcdefghij"), 1, 4, str, str+5, S("a12345fghij"));
  457. test(S("abcdefghij"), 1, 4, str, str+9, S("a123456789fghij"));
  458. test(S("abcdefghij"), 1, 4, str, str+10, S("a1234567890fghij"));
  459. test(S("abcdefghij"), 1, 4, str, str+0, S("afghij"));
  460. test(S("abcdefghij"), 1, 4, str, str+1, S("a1fghij"));
  461. test(S("abcdefghij"), 1, 4, str, str+10, S("a1234567890fghij"));
  462. test(S("abcdefghij"), 1, 4, str, str+19, S("a1234567890123456789fghij"));
  463. test(S("abcdefghij"), 1, 4, str, str+20, S("a12345678901234567890fghij"));
  464. test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
  465. test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
  466. test(S("abcdefghij"), 1, 8, str, str+1, S("a1j"));
  467. test(S("abcdefghij"), 1, 8, str, str+2, S("a12j"));
  468. test(S("abcdefghij"), 1, 8, str, str+4, S("a1234j"));
  469. test(S("abcdefghij"), 1, 8, str, str+5, S("a12345j"));
  470. test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
  471. test(S("abcdefghij"), 1, 8, str, str+1, S("a1j"));
  472. test(S("abcdefghij"), 1, 8, str, str+5, S("a12345j"));
  473. test(S("abcdefghij"), 1, 8, str, str+9, S("a123456789j"));
  474. test(S("abcdefghij"), 1, 8, str, str+10, S("a1234567890j"));
  475. test(S("abcdefghij"), 1, 8, str, str+0, S("aj"));
  476. test(S("abcdefghij"), 1, 8, str, str+1, S("a1j"));
  477. test(S("abcdefghij"), 1, 8, str, str+10, S("a1234567890j"));
  478. test(S("abcdefghij"), 1, 8, str, str+19, S("a1234567890123456789j"));
  479. test(S("abcdefghij"), 1, 8, str, str+20, S("a12345678901234567890j"));
  480. test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
  481. test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
  482. test(S("abcdefghij"), 1, 9, str, str+1, S("a1"));
  483. test(S("abcdefghij"), 1, 9, str, str+2, S("a12"));
  484. test(S("abcdefghij"), 1, 9, str, str+4, S("a1234"));
  485. test(S("abcdefghij"), 1, 9, str, str+5, S("a12345"));
  486. test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
  487. test(S("abcdefghij"), 1, 9, str, str+1, S("a1"));
  488. test(S("abcdefghij"), 1, 9, str, str+5, S("a12345"));
  489. test(S("abcdefghij"), 1, 9, str, str+9, S("a123456789"));
  490. test(S("abcdefghij"), 1, 9, str, str+10, S("a1234567890"));
  491. test(S("abcdefghij"), 1, 9, str, str+0, S("a"));
  492. test(S("abcdefghij"), 1, 9, str, str+1, S("a1"));
  493. test(S("abcdefghij"), 1, 9, str, str+10, S("a1234567890"));
  494. test(S("abcdefghij"), 1, 9, str, str+19, S("a1234567890123456789"));
  495. test(S("abcdefghij"), 1, 9, str, str+20, S("a12345678901234567890"));
  496. test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
  497. test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
  498. test(S("abcdefghij"), 5, 0, str, str+1, S("abcde1fghij"));
  499. test(S("abcdefghij"), 5, 0, str, str+2, S("abcde12fghij"));
  500. test(S("abcdefghij"), 5, 0, str, str+4, S("abcde1234fghij"));
  501. test(S("abcdefghij"), 5, 0, str, str+5, S("abcde12345fghij"));
  502. test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
  503. test(S("abcdefghij"), 5, 0, str, str+1, S("abcde1fghij"));
  504. test(S("abcdefghij"), 5, 0, str, str+5, S("abcde12345fghij"));
  505. test(S("abcdefghij"), 5, 0, str, str+9, S("abcde123456789fghij"));
  506. test(S("abcdefghij"), 5, 0, str, str+10, S("abcde1234567890fghij"));
  507. test(S("abcdefghij"), 5, 0, str, str+0, S("abcdefghij"));
  508. test(S("abcdefghij"), 5, 0, str, str+1, S("abcde1fghij"));
  509. test(S("abcdefghij"), 5, 0, str, str+10, S("abcde1234567890fghij"));
  510. test(S("abcdefghij"), 5, 0, str, str+19, S("abcde1234567890123456789fghij"));
  511. test(S("abcdefghij"), 5, 0, str, str+20, S("abcde12345678901234567890fghij"));
  512. test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
  513. test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
  514. test(S("abcdefghij"), 5, 1, str, str+1, S("abcde1ghij"));
  515. test(S("abcdefghij"), 5, 1, str, str+2, S("abcde12ghij"));
  516. test(S("abcdefghij"), 5, 1, str, str+4, S("abcde1234ghij"));
  517. test(S("abcdefghij"), 5, 1, str, str+5, S("abcde12345ghij"));
  518. test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
  519. test(S("abcdefghij"), 5, 1, str, str+1, S("abcde1ghij"));
  520. test(S("abcdefghij"), 5, 1, str, str+5, S("abcde12345ghij"));
  521. test(S("abcdefghij"), 5, 1, str, str+9, S("abcde123456789ghij"));
  522. test(S("abcdefghij"), 5, 1, str, str+10, S("abcde1234567890ghij"));
  523. test(S("abcdefghij"), 5, 1, str, str+0, S("abcdeghij"));
  524. test(S("abcdefghij"), 5, 1, str, str+1, S("abcde1ghij"));
  525. test(S("abcdefghij"), 5, 1, str, str+10, S("abcde1234567890ghij"));
  526. test(S("abcdefghij"), 5, 1, str, str+19, S("abcde1234567890123456789ghij"));
  527. test(S("abcdefghij"), 5, 1, str, str+20, S("abcde12345678901234567890ghij"));
  528. test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
  529. test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
  530. test(S("abcdefghij"), 5, 2, str, str+1, S("abcde1hij"));
  531. test(S("abcdefghij"), 5, 2, str, str+2, S("abcde12hij"));
  532. test(S("abcdefghij"), 5, 2, str, str+4, S("abcde1234hij"));
  533. test(S("abcdefghij"), 5, 2, str, str+5, S("abcde12345hij"));
  534. test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
  535. test(S("abcdefghij"), 5, 2, str, str+1, S("abcde1hij"));
  536. test(S("abcdefghij"), 5, 2, str, str+5, S("abcde12345hij"));
  537. test(S("abcdefghij"), 5, 2, str, str+9, S("abcde123456789hij"));
  538. test(S("abcdefghij"), 5, 2, str, str+10, S("abcde1234567890hij"));
  539. test(S("abcdefghij"), 5, 2, str, str+0, S("abcdehij"));
  540. test(S("abcdefghij"), 5, 2, str, str+1, S("abcde1hij"));
  541. test(S("abcdefghij"), 5, 2, str, str+10, S("abcde1234567890hij"));
  542. test(S("abcdefghij"), 5, 2, str, str+19, S("abcde1234567890123456789hij"));
  543. test(S("abcdefghij"), 5, 2, str, str+20, S("abcde12345678901234567890hij"));
  544. test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
  545. test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
  546. test(S("abcdefghij"), 5, 4, str, str+1, S("abcde1j"));
  547. test(S("abcdefghij"), 5, 4, str, str+2, S("abcde12j"));
  548. }
  549. void test5()
  550. {
  551. test(S("abcdefghij"), 5, 4, str, str+4, S("abcde1234j"));
  552. test(S("abcdefghij"), 5, 4, str, str+5, S("abcde12345j"));
  553. test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
  554. test(S("abcdefghij"), 5, 4, str, str+1, S("abcde1j"));
  555. test(S("abcdefghij"), 5, 4, str, str+5, S("abcde12345j"));
  556. test(S("abcdefghij"), 5, 4, str, str+9, S("abcde123456789j"));
  557. test(S("abcdefghij"), 5, 4, str, str+10, S("abcde1234567890j"));
  558. test(S("abcdefghij"), 5, 4, str, str+0, S("abcdej"));
  559. test(S("abcdefghij"), 5, 4, str, str+1, S("abcde1j"));
  560. test(S("abcdefghij"), 5, 4, str, str+10, S("abcde1234567890j"));
  561. test(S("abcdefghij"), 5, 4, str, str+19, S("abcde1234567890123456789j"));
  562. test(S("abcdefghij"), 5, 4, str, str+20, S("abcde12345678901234567890j"));
  563. test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
  564. test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
  565. test(S("abcdefghij"), 5, 5, str, str+1, S("abcde1"));
  566. test(S("abcdefghij"), 5, 5, str, str+2, S("abcde12"));
  567. test(S("abcdefghij"), 5, 5, str, str+4, S("abcde1234"));
  568. test(S("abcdefghij"), 5, 5, str, str+5, S("abcde12345"));
  569. test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
  570. test(S("abcdefghij"), 5, 5, str, str+1, S("abcde1"));
  571. test(S("abcdefghij"), 5, 5, str, str+5, S("abcde12345"));
  572. test(S("abcdefghij"), 5, 5, str, str+9, S("abcde123456789"));
  573. test(S("abcdefghij"), 5, 5, str, str+10, S("abcde1234567890"));
  574. test(S("abcdefghij"), 5, 5, str, str+0, S("abcde"));
  575. test(S("abcdefghij"), 5, 5, str, str+1, S("abcde1"));
  576. test(S("abcdefghij"), 5, 5, str, str+10, S("abcde1234567890"));
  577. test(S("abcdefghij"), 5, 5, str, str+19, S("abcde1234567890123456789"));
  578. test(S("abcdefghij"), 5, 5, str, str+20, S("abcde12345678901234567890"));
  579. test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
  580. test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
  581. test(S("abcdefghij"), 9, 0, str, str+1, S("abcdefghi1j"));
  582. test(S("abcdefghij"), 9, 0, str, str+2, S("abcdefghi12j"));
  583. test(S("abcdefghij"), 9, 0, str, str+4, S("abcdefghi1234j"));
  584. test(S("abcdefghij"), 9, 0, str, str+5, S("abcdefghi12345j"));
  585. test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
  586. test(S("abcdefghij"), 9, 0, str, str+1, S("abcdefghi1j"));
  587. test(S("abcdefghij"), 9, 0, str, str+5, S("abcdefghi12345j"));
  588. test(S("abcdefghij"), 9, 0, str, str+9, S("abcdefghi123456789j"));
  589. test(S("abcdefghij"), 9, 0, str, str+10, S("abcdefghi1234567890j"));
  590. test(S("abcdefghij"), 9, 0, str, str+0, S("abcdefghij"));
  591. test(S("abcdefghij"), 9, 0, str, str+1, S("abcdefghi1j"));
  592. test(S("abcdefghij"), 9, 0, str, str+10, S("abcdefghi1234567890j"));
  593. test(S("abcdefghij"), 9, 0, str, str+19, S("abcdefghi1234567890123456789j"));
  594. test(S("abcdefghij"), 9, 0, str, str+20, S("abcdefghi12345678901234567890j"));
  595. test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
  596. test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
  597. test(S("abcdefghij"), 9, 1, str, str+1, S("abcdefghi1"));
  598. test(S("abcdefghij"), 9, 1, str, str+2, S("abcdefghi12"));
  599. test(S("abcdefghij"), 9, 1, str, str+4, S("abcdefghi1234"));
  600. test(S("abcdefghij"), 9, 1, str, str+5, S("abcdefghi12345"));
  601. test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
  602. test(S("abcdefghij"), 9, 1, str, str+1, S("abcdefghi1"));
  603. test(S("abcdefghij"), 9, 1, str, str+5, S("abcdefghi12345"));
  604. test(S("abcdefghij"), 9, 1, str, str+9, S("abcdefghi123456789"));
  605. test(S("abcdefghij"), 9, 1, str, str+10, S("abcdefghi1234567890"));
  606. test(S("abcdefghij"), 9, 1, str, str+0, S("abcdefghi"));
  607. test(S("abcdefghij"), 9, 1, str, str+1, S("abcdefghi1"));
  608. test(S("abcdefghij"), 9, 1, str, str+10, S("abcdefghi1234567890"));
  609. test(S("abcdefghij"), 9, 1, str, str+19, S("abcdefghi1234567890123456789"));
  610. test(S("abcdefghij"), 9, 1, str, str+20, S("abcdefghi12345678901234567890"));
  611. test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
  612. test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
  613. test(S("abcdefghij"), 10, 0, str, str+1, S("abcdefghij1"));
  614. test(S("abcdefghij"), 10, 0, str, str+2, S("abcdefghij12"));
  615. test(S("abcdefghij"), 10, 0, str, str+4, S("abcdefghij1234"));
  616. test(S("abcdefghij"), 10, 0, str, str+5, S("abcdefghij12345"));
  617. test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
  618. test(S("abcdefghij"), 10, 0, str, str+1, S("abcdefghij1"));
  619. test(S("abcdefghij"), 10, 0, str, str+5, S("abcdefghij12345"));
  620. test(S("abcdefghij"), 10, 0, str, str+9, S("abcdefghij123456789"));
  621. test(S("abcdefghij"), 10, 0, str, str+10, S("abcdefghij1234567890"));
  622. test(S("abcdefghij"), 10, 0, str, str+0, S("abcdefghij"));
  623. test(S("abcdefghij"), 10, 0, str, str+1, S("abcdefghij1"));
  624. test(S("abcdefghij"), 10, 0, str, str+10, S("abcdefghij1234567890"));
  625. test(S("abcdefghij"), 10, 0, str, str+19, S("abcdefghij1234567890123456789"));
  626. test(S("abcdefghij"), 10, 0, str, str+20, S("abcdefghij12345678901234567890"));
  627. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
  628. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
  629. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+1, S("1abcdefghijklmnopqrst"));
  630. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+2, S("12abcdefghijklmnopqrst"));
  631. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+4, S("1234abcdefghijklmnopqrst"));
  632. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+5, S("12345abcdefghijklmnopqrst"));
  633. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
  634. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+1, S("1abcdefghijklmnopqrst"));
  635. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+5, S("12345abcdefghijklmnopqrst"));
  636. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+9, S("123456789abcdefghijklmnopqrst"));
  637. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+10, S("1234567890abcdefghijklmnopqrst"));
  638. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+0, S("abcdefghijklmnopqrst"));
  639. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+1, S("1abcdefghijklmnopqrst"));
  640. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+10, S("1234567890abcdefghijklmnopqrst"));
  641. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+19, S("1234567890123456789abcdefghijklmnopqrst"));
  642. test(S("abcdefghijklmnopqrst"), 0, 0, str, str+20, S("12345678901234567890abcdefghijklmnopqrst"));
  643. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
  644. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
  645. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+1, S("1bcdefghijklmnopqrst"));
  646. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+2, S("12bcdefghijklmnopqrst"));
  647. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+4, S("1234bcdefghijklmnopqrst"));
  648. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+5, S("12345bcdefghijklmnopqrst"));
  649. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
  650. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+1, S("1bcdefghijklmnopqrst"));
  651. }
  652. void test6()
  653. {
  654. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+5, S("12345bcdefghijklmnopqrst"));
  655. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+9, S("123456789bcdefghijklmnopqrst"));
  656. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+10, S("1234567890bcdefghijklmnopqrst"));
  657. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+0, S("bcdefghijklmnopqrst"));
  658. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+1, S("1bcdefghijklmnopqrst"));
  659. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+10, S("1234567890bcdefghijklmnopqrst"));
  660. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+19, S("1234567890123456789bcdefghijklmnopqrst"));
  661. test(S("abcdefghijklmnopqrst"), 0, 1, str, str+20, S("12345678901234567890bcdefghijklmnopqrst"));
  662. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
  663. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
  664. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+1, S("1klmnopqrst"));
  665. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+2, S("12klmnopqrst"));
  666. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+4, S("1234klmnopqrst"));
  667. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+5, S("12345klmnopqrst"));
  668. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
  669. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+1, S("1klmnopqrst"));
  670. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+5, S("12345klmnopqrst"));
  671. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+9, S("123456789klmnopqrst"));
  672. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+10, S("1234567890klmnopqrst"));
  673. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+0, S("klmnopqrst"));
  674. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+1, S("1klmnopqrst"));
  675. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+10, S("1234567890klmnopqrst"));
  676. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+19, S("1234567890123456789klmnopqrst"));
  677. test(S("abcdefghijklmnopqrst"), 0, 10, str, str+20, S("12345678901234567890klmnopqrst"));
  678. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
  679. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
  680. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+1, S("1t"));
  681. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+2, S("12t"));
  682. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+4, S("1234t"));
  683. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+5, S("12345t"));
  684. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
  685. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+1, S("1t"));
  686. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+5, S("12345t"));
  687. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+9, S("123456789t"));
  688. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+10, S("1234567890t"));
  689. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+0, S("t"));
  690. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+1, S("1t"));
  691. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+10, S("1234567890t"));
  692. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+19, S("1234567890123456789t"));
  693. test(S("abcdefghijklmnopqrst"), 0, 19, str, str+20, S("12345678901234567890t"));
  694. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
  695. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
  696. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+1, S("1"));
  697. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+2, S("12"));
  698. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+4, S("1234"));
  699. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+5, S("12345"));
  700. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
  701. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+1, S("1"));
  702. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+5, S("12345"));
  703. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+9, S("123456789"));
  704. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+10, S("1234567890"));
  705. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+0, S(""));
  706. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+1, S("1"));
  707. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+10, S("1234567890"));
  708. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+19, S("1234567890123456789"));
  709. test(S("abcdefghijklmnopqrst"), 0, 20, str, str+20, S("12345678901234567890"));
  710. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
  711. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
  712. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+1, S("a1bcdefghijklmnopqrst"));
  713. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+2, S("a12bcdefghijklmnopqrst"));
  714. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+4, S("a1234bcdefghijklmnopqrst"));
  715. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+5, S("a12345bcdefghijklmnopqrst"));
  716. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
  717. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+1, S("a1bcdefghijklmnopqrst"));
  718. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+5, S("a12345bcdefghijklmnopqrst"));
  719. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+9, S("a123456789bcdefghijklmnopqrst"));
  720. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+10, S("a1234567890bcdefghijklmnopqrst"));
  721. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+0, S("abcdefghijklmnopqrst"));
  722. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+1, S("a1bcdefghijklmnopqrst"));
  723. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+10, S("a1234567890bcdefghijklmnopqrst"));
  724. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+19, S("a1234567890123456789bcdefghijklmnopqrst"));
  725. test(S("abcdefghijklmnopqrst"), 1, 0, str, str+20, S("a12345678901234567890bcdefghijklmnopqrst"));
  726. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
  727. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
  728. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+1, S("a1cdefghijklmnopqrst"));
  729. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+2, S("a12cdefghijklmnopqrst"));
  730. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+4, S("a1234cdefghijklmnopqrst"));
  731. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+5, S("a12345cdefghijklmnopqrst"));
  732. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
  733. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+1, S("a1cdefghijklmnopqrst"));
  734. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+5, S("a12345cdefghijklmnopqrst"));
  735. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+9, S("a123456789cdefghijklmnopqrst"));
  736. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+10, S("a1234567890cdefghijklmnopqrst"));
  737. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+0, S("acdefghijklmnopqrst"));
  738. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+1, S("a1cdefghijklmnopqrst"));
  739. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+10, S("a1234567890cdefghijklmnopqrst"));
  740. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+19, S("a1234567890123456789cdefghijklmnopqrst"));
  741. test(S("abcdefghijklmnopqrst"), 1, 1, str, str+20, S("a12345678901234567890cdefghijklmnopqrst"));
  742. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
  743. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
  744. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+1, S("a1klmnopqrst"));
  745. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+2, S("a12klmnopqrst"));
  746. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+4, S("a1234klmnopqrst"));
  747. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+5, S("a12345klmnopqrst"));
  748. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
  749. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+1, S("a1klmnopqrst"));
  750. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+5, S("a12345klmnopqrst"));
  751. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+9, S("a123456789klmnopqrst"));
  752. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+10, S("a1234567890klmnopqrst"));
  753. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+0, S("aklmnopqrst"));
  754. }
  755. void test7()
  756. {
  757. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+1, S("a1klmnopqrst"));
  758. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+10, S("a1234567890klmnopqrst"));
  759. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+19, S("a1234567890123456789klmnopqrst"));
  760. test(S("abcdefghijklmnopqrst"), 1, 9, str, str+20, S("a12345678901234567890klmnopqrst"));
  761. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
  762. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
  763. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+1, S("a1t"));
  764. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+2, S("a12t"));
  765. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+4, S("a1234t"));
  766. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+5, S("a12345t"));
  767. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
  768. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+1, S("a1t"));
  769. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+5, S("a12345t"));
  770. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+9, S("a123456789t"));
  771. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+10, S("a1234567890t"));
  772. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+0, S("at"));
  773. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+1, S("a1t"));
  774. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+10, S("a1234567890t"));
  775. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+19, S("a1234567890123456789t"));
  776. test(S("abcdefghijklmnopqrst"), 1, 18, str, str+20, S("a12345678901234567890t"));
  777. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
  778. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
  779. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+1, S("a1"));
  780. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+2, S("a12"));
  781. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+4, S("a1234"));
  782. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+5, S("a12345"));
  783. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
  784. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+1, S("a1"));
  785. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+5, S("a12345"));
  786. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+9, S("a123456789"));
  787. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+10, S("a1234567890"));
  788. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+0, S("a"));
  789. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+1, S("a1"));
  790. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+10, S("a1234567890"));
  791. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+19, S("a1234567890123456789"));
  792. test(S("abcdefghijklmnopqrst"), 1, 19, str, str+20, S("a12345678901234567890"));
  793. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
  794. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
  795. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+1, S("abcdefghij1klmnopqrst"));
  796. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+2, S("abcdefghij12klmnopqrst"));
  797. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+4, S("abcdefghij1234klmnopqrst"));
  798. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+5, S("abcdefghij12345klmnopqrst"));
  799. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
  800. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+1, S("abcdefghij1klmnopqrst"));
  801. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+5, S("abcdefghij12345klmnopqrst"));
  802. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+9, S("abcdefghij123456789klmnopqrst"));
  803. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+10, S("abcdefghij1234567890klmnopqrst"));
  804. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+0, S("abcdefghijklmnopqrst"));
  805. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+1, S("abcdefghij1klmnopqrst"));
  806. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+10, S("abcdefghij1234567890klmnopqrst"));
  807. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+19, S("abcdefghij1234567890123456789klmnopqrst"));
  808. test(S("abcdefghijklmnopqrst"), 10, 0, str, str+20, S("abcdefghij12345678901234567890klmnopqrst"));
  809. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
  810. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
  811. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+1, S("abcdefghij1lmnopqrst"));
  812. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+2, S("abcdefghij12lmnopqrst"));
  813. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+4, S("abcdefghij1234lmnopqrst"));
  814. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+5, S("abcdefghij12345lmnopqrst"));
  815. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
  816. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+1, S("abcdefghij1lmnopqrst"));
  817. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+5, S("abcdefghij12345lmnopqrst"));
  818. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+9, S("abcdefghij123456789lmnopqrst"));
  819. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+10, S("abcdefghij1234567890lmnopqrst"));
  820. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+0, S("abcdefghijlmnopqrst"));
  821. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+1, S("abcdefghij1lmnopqrst"));
  822. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+10, S("abcdefghij1234567890lmnopqrst"));
  823. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+19, S("abcdefghij1234567890123456789lmnopqrst"));
  824. test(S("abcdefghijklmnopqrst"), 10, 1, str, str+20, S("abcdefghij12345678901234567890lmnopqrst"));
  825. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
  826. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
  827. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+1, S("abcdefghij1pqrst"));
  828. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+2, S("abcdefghij12pqrst"));
  829. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+4, S("abcdefghij1234pqrst"));
  830. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+5, S("abcdefghij12345pqrst"));
  831. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
  832. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+1, S("abcdefghij1pqrst"));
  833. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+5, S("abcdefghij12345pqrst"));
  834. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+9, S("abcdefghij123456789pqrst"));
  835. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+10, S("abcdefghij1234567890pqrst"));
  836. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+0, S("abcdefghijpqrst"));
  837. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+1, S("abcdefghij1pqrst"));
  838. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+10, S("abcdefghij1234567890pqrst"));
  839. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+19, S("abcdefghij1234567890123456789pqrst"));
  840. test(S("abcdefghijklmnopqrst"), 10, 5, str, str+20, S("abcdefghij12345678901234567890pqrst"));
  841. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
  842. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
  843. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+1, S("abcdefghij1t"));
  844. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+2, S("abcdefghij12t"));
  845. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+4, S("abcdefghij1234t"));
  846. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+5, S("abcdefghij12345t"));
  847. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
  848. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+1, S("abcdefghij1t"));
  849. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+5, S("abcdefghij12345t"));
  850. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+9, S("abcdefghij123456789t"));
  851. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+10, S("abcdefghij1234567890t"));
  852. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+0, S("abcdefghijt"));
  853. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+1, S("abcdefghij1t"));
  854. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+10, S("abcdefghij1234567890t"));
  855. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+19, S("abcdefghij1234567890123456789t"));
  856. test(S("abcdefghijklmnopqrst"), 10, 9, str, str+20, S("abcdefghij12345678901234567890t"));
  857. }
  858. void test8()
  859. {
  860. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
  861. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
  862. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+1, S("abcdefghij1"));
  863. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+2, S("abcdefghij12"));
  864. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+4, S("abcdefghij1234"));
  865. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+5, S("abcdefghij12345"));
  866. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
  867. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+1, S("abcdefghij1"));
  868. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+5, S("abcdefghij12345"));
  869. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+9, S("abcdefghij123456789"));
  870. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+10, S("abcdefghij1234567890"));
  871. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+0, S("abcdefghij"));
  872. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+1, S("abcdefghij1"));
  873. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+10, S("abcdefghij1234567890"));
  874. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+19, S("abcdefghij1234567890123456789"));
  875. test(S("abcdefghijklmnopqrst"), 10, 10, str, str+20, S("abcdefghij12345678901234567890"));
  876. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
  877. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
  878. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+1, S("abcdefghijklmnopqrs1t"));
  879. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+2, S("abcdefghijklmnopqrs12t"));
  880. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+4, S("abcdefghijklmnopqrs1234t"));
  881. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+5, S("abcdefghijklmnopqrs12345t"));
  882. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
  883. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+1, S("abcdefghijklmnopqrs1t"));
  884. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+5, S("abcdefghijklmnopqrs12345t"));
  885. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+9, S("abcdefghijklmnopqrs123456789t"));
  886. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+10, S("abcdefghijklmnopqrs1234567890t"));
  887. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+0, S("abcdefghijklmnopqrst"));
  888. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+1, S("abcdefghijklmnopqrs1t"));
  889. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+10, S("abcdefghijklmnopqrs1234567890t"));
  890. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+19, S("abcdefghijklmnopqrs1234567890123456789t"));
  891. test(S("abcdefghijklmnopqrst"), 19, 0, str, str+20, S("abcdefghijklmnopqrs12345678901234567890t"));
  892. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
  893. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
  894. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+1, S("abcdefghijklmnopqrs1"));
  895. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+2, S("abcdefghijklmnopqrs12"));
  896. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+4, S("abcdefghijklmnopqrs1234"));
  897. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+5, S("abcdefghijklmnopqrs12345"));
  898. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
  899. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+1, S("abcdefghijklmnopqrs1"));
  900. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+5, S("abcdefghijklmnopqrs12345"));
  901. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+9, S("abcdefghijklmnopqrs123456789"));
  902. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+10, S("abcdefghijklmnopqrs1234567890"));
  903. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+0, S("abcdefghijklmnopqrs"));
  904. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+1, S("abcdefghijklmnopqrs1"));
  905. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+10, S("abcdefghijklmnopqrs1234567890"));
  906. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+19, S("abcdefghijklmnopqrs1234567890123456789"));
  907. test(S("abcdefghijklmnopqrst"), 19, 1, str, str+20, S("abcdefghijklmnopqrs12345678901234567890"));
  908. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
  909. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
  910. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+1, S("abcdefghijklmnopqrst1"));
  911. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+2, S("abcdefghijklmnopqrst12"));
  912. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+4, S("abcdefghijklmnopqrst1234"));
  913. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+5, S("abcdefghijklmnopqrst12345"));
  914. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
  915. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+1, S("abcdefghijklmnopqrst1"));
  916. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+5, S("abcdefghijklmnopqrst12345"));
  917. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+9, S("abcdefghijklmnopqrst123456789"));
  918. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+10, S("abcdefghijklmnopqrst1234567890"));
  919. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+0, S("abcdefghijklmnopqrst"));
  920. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+1, S("abcdefghijklmnopqrst1"));
  921. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+10, S("abcdefghijklmnopqrst1234567890"));
  922. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+19, S("abcdefghijklmnopqrst1234567890123456789"));
  923. test(S("abcdefghijklmnopqrst"), 20, 0, str, str+20, S("abcdefghijklmnopqrst12345678901234567890"));
  924. }
  925. */
  926. int main()
  927. {
  928. test0();
  929. // test1();
  930. // test2();
  931. // test3();
  932. // test4();
  933. // test5();
  934. // test6();
  935. // test7();
  936. // test8();
  937. }