string_view_compat_test.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2007-2017. Distributed under the Boost
  4. // Software License, Version 1.0. (See accompanying file
  5. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // See http://www.boost.org/libs/container for documentation.
  8. //
  9. //////////////////////////////////////////////////////////////////////////////
  10. #include <boost/container/string.hpp>
  11. #include <boost/utility/string_view.hpp>
  12. #include <boost/core/lightweight_test.hpp>
  13. void conversion_test()
  14. {
  15. #ifndef BOOST_CONTAINER_TEMPLATED_CONVERSION_OPERATOR_BROKEN
  16. {
  17. const boost::container::string s = "some text";
  18. boost::string_view sv(s);
  19. BOOST_TEST(s.data() == sv.data() && s.size() == sv.size());
  20. boost::string_view sv2;
  21. sv2 = s;
  22. BOOST_TEST(s.data() == sv2.data() && s.size() == sv2.size());
  23. const boost::string_view csv(s);
  24. BOOST_TEST(s.data() == sv.data() && s.size() == csv.size());
  25. }
  26. #endif
  27. }
  28. void to_view_test()
  29. {
  30. const boost::container::string s = "some text";
  31. boost::string_view sv(s.to_view<boost::string_view>());
  32. BOOST_TEST(s.data() == sv.data() && s.size() == sv.size());
  33. boost::string_view sv2;
  34. sv2 = s.to_view<boost::string_view>();
  35. BOOST_TEST(s.data() == sv2.data() && s.size() == sv2.size());
  36. const boost::string_view csv(s.to_view<boost::string_view>());
  37. BOOST_TEST(s.data() == csv.data() && s.size() == csv.size());
  38. }
  39. void equal_test()
  40. {
  41. const boost::string_view sv = "same text";
  42. const boost::string_view svd = "different text";
  43. const boost::container::string s = "same text";
  44. BOOST_TEST(sv == s);
  45. BOOST_TEST(s == sv);
  46. BOOST_TEST(!(svd == s));
  47. BOOST_TEST(!(s == svd));
  48. }
  49. void unequal_test()
  50. {
  51. const boost::string_view sv = "same text";
  52. const boost::string_view svd = "different text";
  53. const boost::container::string s = "same text";
  54. BOOST_TEST(!(sv != s));
  55. BOOST_TEST(!(s != sv));
  56. BOOST_TEST(svd != s);
  57. BOOST_TEST(s != svd);
  58. }
  59. void less_test()
  60. {
  61. boost::string_view sv = "0123456";
  62. boost::container::string s = "0123459";
  63. BOOST_TEST(sv < s);
  64. BOOST_TEST(!(s < sv));
  65. sv = "0123459";
  66. s = "0123456";
  67. BOOST_TEST(!(sv < s));
  68. BOOST_TEST(s < sv);
  69. sv = "0123456";
  70. BOOST_TEST(!(sv < s));
  71. BOOST_TEST(!(s < sv));
  72. }
  73. void greater_test()
  74. {
  75. boost::string_view sv = "0123459";
  76. boost::container::string s = "0123456";
  77. BOOST_TEST(sv > s);
  78. BOOST_TEST(!(s > sv));
  79. sv = "0123456";
  80. s = "0123459";
  81. BOOST_TEST(!(sv > s));
  82. BOOST_TEST(s > sv);
  83. sv = "0123459";
  84. BOOST_TEST(!(sv > s));
  85. BOOST_TEST(!(s > sv));
  86. }
  87. void less_equal_test()
  88. {
  89. boost::string_view sv = "0123456";
  90. boost::container::string s = "0123459";
  91. BOOST_TEST(sv <= s);
  92. BOOST_TEST(!(s <= sv));
  93. sv = "0123459";
  94. s = "0123456";
  95. BOOST_TEST(!(sv <= s));
  96. BOOST_TEST(s <= sv);
  97. sv = "0123456";
  98. BOOST_TEST(sv <= s);
  99. BOOST_TEST(s <= sv);
  100. }
  101. void greater_equal_test()
  102. {
  103. boost::string_view sv = "0123459";
  104. boost::container::string s = "0123456";
  105. BOOST_TEST(sv >= s);
  106. BOOST_TEST(!(s >= sv));
  107. sv = "0123456";
  108. s = "0123459";
  109. BOOST_TEST(!(sv >= s));
  110. BOOST_TEST(s >= sv);
  111. sv = "0123459";
  112. BOOST_TEST(sv >= s);
  113. BOOST_TEST(s >= sv);
  114. }
  115. void constructor_test()
  116. {
  117. boost::string_view sv = "0123459";
  118. boost::container::string s(sv);
  119. BOOST_TEST(sv == s);
  120. boost::container::string s2(sv, s.get_allocator());
  121. BOOST_TEST(sv == s);
  122. }
  123. void assignment_test()
  124. {
  125. boost::string_view sv = "0123459";
  126. boost::container::string s;
  127. s = sv;
  128. BOOST_TEST(sv == s);
  129. }
  130. void assign_test()
  131. {
  132. boost::string_view sv = "0123459";
  133. boost::container::string s;
  134. s.assign(sv);
  135. BOOST_TEST(sv == s);
  136. }
  137. void plus_equal_test()
  138. {
  139. boost::string_view sv = "23459";
  140. boost::container::string s("01");
  141. s += sv;
  142. BOOST_TEST(s == "0123459");
  143. }
  144. void append_test()
  145. {
  146. boost::string_view sv = "23459";
  147. boost::container::string s("01");
  148. s.append(sv);
  149. BOOST_TEST(s == "0123459");
  150. }
  151. void insert_test()
  152. {
  153. boost::string_view sv = "34";
  154. boost::container::string s("01259");
  155. s.insert(3u, sv);
  156. BOOST_TEST(s == "0123459");
  157. }
  158. void replace_test()
  159. {
  160. boost::string_view sv = "5678";
  161. boost::container::string s("01259");
  162. s.replace(2u, 2u, sv);
  163. BOOST_TEST(s == "0156789");
  164. s.replace(s.begin()+3, s.begin()+6, sv);
  165. BOOST_TEST(s == "01556789");
  166. s.replace(5u, 3u, sv, 2u, 2u);
  167. BOOST_TEST(s == "0155678");
  168. }
  169. void find_test()
  170. {
  171. const boost::string_view sv = "25";
  172. boost::container::string s("0125925123");
  173. BOOST_TEST(s.find(sv,4) == 5);
  174. }
  175. void rfind_test()
  176. {
  177. const boost::string_view sv = "25";
  178. boost::container::string s("0125925123");
  179. BOOST_TEST(s.rfind(sv,4) == 2);
  180. }
  181. void find_first_of_test()
  182. {
  183. const boost::string_view sv = "52";
  184. boost::container::string s("0125925123");
  185. BOOST_TEST(s.find_first_of(sv,4) == 5);
  186. }
  187. void find_last_of_test()
  188. {
  189. const boost::string_view sv = "52";
  190. boost::container::string s("520125925123");
  191. BOOST_TEST(s.find_last_of(sv,6) == 5);
  192. }
  193. void find_first_not_of_test()
  194. {
  195. const boost::string_view sv = "52";
  196. boost::container::string s("0125925123");
  197. BOOST_TEST(s.find_first_not_of(sv,2) == 4);
  198. }
  199. void find_last_not_of_test()
  200. {
  201. const boost::string_view sv = "52";
  202. boost::container::string s("0125925123");
  203. BOOST_TEST(s.find_last_not_of(sv,6) == 4);
  204. }
  205. void compare_test()
  206. {
  207. const boost::string_view sv = "52";
  208. boost::container::string s("0125925123");
  209. BOOST_TEST(s.compare(sv) < 0);
  210. BOOST_TEST(s.compare(boost::string_view("0125925123")) == 0);
  211. BOOST_TEST(s.compare(2u, s.size() - 2u, boost::string_view("25925123")) == 0);
  212. boost::string_view sv2("5212592512389");
  213. BOOST_TEST(s.compare(2u, s.size() - 2u, sv2, 3, sv2.size()-5u) == 0);
  214. }
  215. int main()
  216. {
  217. conversion_test();
  218. to_view_test();
  219. equal_test();
  220. unequal_test();
  221. less_test();
  222. greater_test();
  223. less_equal_test();
  224. greater_equal_test();
  225. constructor_test();
  226. assignment_test();
  227. assign_test();
  228. plus_equal_test();
  229. append_test();
  230. insert_test();
  231. replace_test();
  232. find_test();
  233. rfind_test();
  234. find_first_of_test();
  235. find_last_of_test();
  236. find_first_not_of_test();
  237. find_last_not_of_test();
  238. compare_test();
  239. return boost::report_errors();
  240. }