Skip to content

Commit a513e06

Browse files
authored
Merge pull request #466 from fireflyautomatix/iterable-string-collection
Iterable string collection
2 parents f7b648a + 967ce5d commit a513e06

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

src/mqtt/string_collection.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,12 @@ class string_collection
223223
*
224224
*/
225225
char* const* c_arr() const { return (char* const *) cArr_.data(); }
226+
227+
using const_iterator = collection_type::const_iterator;
228+
229+
const_iterator begin() const { return coll_.begin(); }
230+
231+
const_iterator end() const { return coll_.end(); }
226232
};
227233

228234
/////////////////////////////////////////////////////////////////////////////

test/unit/test_string_collection.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,85 @@ TEST_CASE("string_collection clear", "[collections]")
326326
REQUIRE(size_t(0) == sc.size());
327327
}
328328

329+
330+
// ----------------------------------------------------------------------
331+
// Test the const_iterator class
332+
// ----------------------------------------------------------------------
333+
334+
TEST_CASE("string_collection for each", "[collections]")
335+
{
336+
string_collection sc(VEC);
337+
338+
size_t i = 0u;
339+
for (const auto & string : sc) {
340+
REQUIRE(sc[i] == sc[i]);
341+
++i;
342+
}
343+
REQUIRE(i == sc.size());
344+
}
345+
346+
TEST_CASE("string_collection iterator for with advance", "[collections]")
347+
{
348+
string_collection sc(VEC);
349+
350+
size_t i = 0u;
351+
for (auto it = sc.begin(); it != sc.end(); std::advance(it, 1)) {
352+
REQUIRE(*it == sc[i]);
353+
++i;
354+
}
355+
REQUIRE(i == sc.size());
356+
}
357+
358+
TEST_CASE("string_collection iterator for with pre-increment", "[collections]")
359+
{
360+
string_collection sc(VEC);
361+
362+
size_t i = 0u;
363+
for (auto it = sc.begin(); it != sc.end(); ++it) {
364+
REQUIRE(*it == sc[i]);
365+
++i;
366+
}
367+
REQUIRE(i == sc.size());
368+
}
369+
370+
TEST_CASE("string_collection iterator for with post increment", "[collections]")
371+
{
372+
string_collection sc(VEC);
373+
374+
size_t i = 0u;
375+
for (auto it = sc.begin(); it != sc.end(); it++) {
376+
REQUIRE(*it == sc[i]);
377+
++i;
378+
}
379+
REQUIRE(i == sc.size());
380+
}
381+
382+
TEST_CASE("string_collection begin", "[collections]")
383+
{
384+
string_collection sc(VEC);
385+
386+
REQUIRE(*(sc.begin()) == sc[0u]);
387+
}
388+
389+
TEST_CASE("string_collection std copy", "[collections]")
390+
{
391+
string_collection sc(VEC);
392+
393+
std::vector<std::string> output;
394+
std::copy(
395+
sc.begin(),
396+
sc.end(),
397+
std::back_inserter(output)
398+
);
399+
400+
REQUIRE(sc.size() == output.size());
401+
402+
for (size_t i = 0u; i < sc.size(); ++i) {
403+
REQUIRE(sc[i] == output[i]);
404+
}
405+
}
406+
407+
329408
/////////////////////////////////////////////////////////////////////////////
330409
// name_value_collection
331410
/////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)