21 #define BOOST_TEST_MODULE libjmmcg_tests
22 #include <boost/test/included/unit_test.hpp>
24 #include "core/stack_string.hpp"
28 #pragma GCC diagnostic ignored "-Wself-assign-overloaded"
29 #pragma GCC diagnostic ignored "-Wself-move"
31 using namespace libjmmcg;
33 BOOST_AUTO_TEST_SUITE(string_tests)
35 BOOST_AUTO_TEST_SUITE(default_ctors)
40 BOOST_AUTO_TEST_CASE(default_ctor)
48 BOOST_AUTO_TEST_CASE(default_ctor_empty)
51 BOOST_CHECK(s.empty());
52 BOOST_CHECK_EQUAL(s.size(), stack_string::size_type());
53 BOOST_CHECK_EQUAL(s.capacity(), stack_string::size_type());
68 BOOST_AUTO_TEST_CASE(default_ctor_cctor)
72 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
73 BOOST_CHECK_EQUAL(s1.size(), s2.size());
74 BOOST_CHECK_EQUAL(s1.capacity(), s2.capacity());
77 BOOST_AUTO_TEST_CASE(default_ctor_move_ctor)
81 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
82 BOOST_CHECK_EQUAL(s1.size(), s2.size());
83 BOOST_CHECK_EQUAL(s1.capacity(), s2.capacity());
86 BOOST_AUTO_TEST_CASE(default_ctor_swap)
90 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
91 BOOST_CHECK_EQUAL(s1.size(), s2.size());
92 BOOST_CHECK_EQUAL(s1.capacity(), s2.capacity());
95 BOOST_AUTO_TEST_CASE(default_ctor_assignment)
100 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
101 BOOST_CHECK_EQUAL(s1.size(), s2.size());
102 BOOST_CHECK_EQUAL(s1.capacity(), s2.capacity());
105 BOOST_AUTO_TEST_CASE(default_ctor_move_assignment)
110 BOOST_CHECK_EQUAL(s1.empty(), s2.empty());
111 BOOST_CHECK_EQUAL(s1.size(), s2.size());
112 BOOST_CHECK_EQUAL(s1.capacity(), s2.capacity());
115 BOOST_AUTO_TEST_CASE(self_assignment)
119 BOOST_CHECK(s.empty());
120 BOOST_CHECK_EQUAL(s.size(), stack_string::size_type());
121 BOOST_CHECK_EQUAL(s.capacity(), stack_string::size_type());
124 BOOST_AUTO_TEST_CASE(equality)
130 BOOST_AUTO_TEST_CASE(inequality)
133 BOOST_CHECK(!(s1!=s2));
136 BOOST_AUTO_TEST_CASE(clear)
140 BOOST_CHECK(s.empty());
141 BOOST_CHECK_EQUAL(s.size(), stack_string::size_type());
142 BOOST_CHECK_EQUAL(s.capacity(), stack_string::size_type());
145 BOOST_AUTO_TEST_CASE(reserve)
147 const stack_string::size_type res(1);
150 BOOST_CHECK(s.empty());
151 BOOST_CHECK_EQUAL(s.size(), stack_string::size_type());
152 BOOST_CHECK_EQUAL(s.capacity(), res);
155 BOOST_AUTO_TEST_CASE(rereserve_bigger)
157 const stack_string::size_type res1(1);
158 const stack_string::size_type res2(2);
162 BOOST_CHECK_EQUAL(s.capacity(), res2);
165 BOOST_AUTO_TEST_CASE(rereserve_smaller)
167 const stack_string::size_type res1(2);
168 const stack_string::size_type res2(1);
172 BOOST_CHECK_EQUAL(s.capacity(), res1);
175 BOOST_AUTO_TEST_CASE(resize)
177 const stack_string::size_type res(1);
180 BOOST_CHECK_EQUAL(s.size(), res);
181 BOOST_CHECK_LE(s.size(), s.capacity());
184 BOOST_AUTO_TEST_CASE(reresize_bigger)
186 const stack_string::size_type res1(1);
187 const stack_string::size_type res2(2);
191 BOOST_CHECK_EQUAL(s.size(), res2);
192 BOOST_CHECK_LE(s.size(), s.capacity());
195 BOOST_AUTO_TEST_CASE(reresize_smaller)
197 const stack_string::size_type res1(2);
198 const stack_string::size_type res2(1);
202 BOOST_CHECK_EQUAL(s.size(), res2);
203 BOOST_CHECK_GE(s.capacity(), res1);
206 BOOST_AUTO_TEST_CASE(resize_init)
208 const stack_string::size_type res(1);
209 const stack_string::value_type fill=
'X';
212 BOOST_CHECK_EQUAL(s.size(), res);
213 BOOST_CHECK_LE(s.size(), s.capacity());
214 BOOST_CHECK_EQUAL(s[0], fill);
217 BOOST_AUTO_TEST_CASE(reresize_bigger_init)
219 const stack_string::size_type res1(1);
220 const stack_string::size_type res2(2);
221 const stack_string::value_type fill=
'X';
223 s.resize(res1, fill);
224 s.resize(res2, fill);
225 BOOST_CHECK_EQUAL(s.size(), res2);
226 BOOST_CHECK_LE(s.size(), s.capacity());
227 BOOST_CHECK_EQUAL(s[0], fill);
228 BOOST_CHECK_EQUAL(s[1], fill);
231 BOOST_AUTO_TEST_CASE(reresize_smaller_init)
233 const stack_string::size_type res1(2);
234 const stack_string::size_type res2(1);
235 const stack_string::value_type fill=
'X';
237 s.resize(res1, fill);
238 s.resize(res2, fill);
239 BOOST_CHECK_EQUAL(s.size(), res2);
240 BOOST_CHECK_GE(s.capacity(), res1);
241 BOOST_CHECK_EQUAL(s[0], fill);
244 BOOST_AUTO_TEST_CASE(push_back)
246 const stack_string::value_type fill=
'X';
249 BOOST_CHECK_EQUAL(s.size(), stack_string::size_type(1));
250 BOOST_CHECK_GE(s.capacity(), s.size());
251 BOOST_CHECK_EQUAL(s[0], fill);
254 BOOST_AUTO_TEST_CASE(insert_nullptr)
257 const stack_string::iterator i=s1.insert(s1.end(), s2.begin(), s2.begin());
258 BOOST_CHECK(s1.empty());
259 BOOST_CHECK_EQUAL(s1.size(), stack_string::size_type());
260 BOOST_CHECK_EQUAL(i, s1.end());
263 BOOST_AUTO_TEST_CASE(erase)
266 const stack_string::iterator i=s.erase(s.begin(), s.end());
267 BOOST_CHECK(s.empty());
268 BOOST_CHECK_EQUAL(s.size(), stack_string::size_type());
269 BOOST_CHECK_EQUAL(i, s.end());
272 BOOST_AUTO_TEST_CASE(replace_dest_empty)
275 s1.replace(s1.begin(), s1.begin(), s2.begin(), s2.end());
276 BOOST_CHECK(s1.empty());
277 BOOST_CHECK_EQUAL(s1.size(), stack_string::size_type());
280 BOOST_AUTO_TEST_CASE(replace_src_empty)
283 s1.replace(s1.begin(), s1.end(), s2.begin(), s2.begin());
284 BOOST_CHECK(s1.empty());
285 BOOST_CHECK_EQUAL(s1.size(), stack_string::size_type());
288 BOOST_AUTO_TEST_CASE(replace_both_empty)
291 s1.replace(s1.begin(), s1.begin(), s2.begin(), s2.begin());
292 BOOST_CHECK(s1.empty());
293 BOOST_CHECK_EQUAL(s1.size(), stack_string::size_type());
296 BOOST_AUTO_TEST_CASE(hash)
299 BOOST_CHECK_EQUAL(std::hash<stack_string>()(s), std::size_t());
302 BOOST_AUTO_TEST_CASE(insert)
305 std::stringstream ss;
307 BOOST_CHECK_EQUAL(ss.str(), std::string(
""));
310 BOOST_AUTO_TEST_CASE(extract)
313 std::stringstream ss;
315 BOOST_CHECK(s.empty());
318 BOOST_AUTO_TEST_SUITE_END()
320 BOOST_AUTO_TEST_SUITE_END()