diff --git a/include/etl/string_utilities.h b/include/etl/string_utilities.h index 8610d573..94d4589c 100644 --- a/include/etl/string_utilities.h +++ b/include/etl/string_utilities.h @@ -36,11 +36,15 @@ SOFTWARE. #include "enum_type.h" #include "memory.h" #include "char_traits.h" +#include "optional.h" #include namespace etl { + //*************************************************************************** + /// string_pad_direction + //*************************************************************************** struct string_pad_direction { enum enum_type @@ -55,13 +59,16 @@ namespace etl ETL_END_ENUM_TYPE }; + //*************************************************************************** + /// whitespace + //*************************************************************************** template struct whitespace; template <> struct whitespace { - static const char* value() + static ETL_CONSTEXPR const char* value() { return " \t\n\r\f\v"; } @@ -70,7 +77,7 @@ namespace etl template <> struct whitespace { - static const wchar_t* value() + static ETL_CONSTEXPR const wchar_t* value() { return L" \t\n\r\f\v"; } @@ -79,7 +86,7 @@ namespace etl template <> struct whitespace { - static const char16_t* value() + static ETL_CONSTEXPR const char16_t* value() { return u" \t\n\r\f\v"; } @@ -88,12 +95,17 @@ namespace etl template <> struct whitespace { - static const char32_t* value() + static ETL_CONSTEXPR const char32_t* value() { return U" \t\n\r\f\v"; } }; +#if ETL_CPP17_SUPPORTED + template + inline constexpr const TChar* whitespace_v = whitespace::value(); +#endif + //*************************************************************************** /// trim_from_left /// Trim left of trim_characters @@ -686,33 +698,40 @@ namespace etl /// get_token //*************************************************************************** template - TStringView get_token(const TIString& s, typename TIString::const_pointer delimiters, const TStringView& last_view) + etl::optional get_token(const TIString& s, typename TIString::const_pointer delimiters, const etl::optional& last_view, bool ignore_empty_tokens) { - size_t position = 0U; + typedef typename TIString::const_pointer const_pointer; - // Does the last_view have valid data? - if (last_view.data() != ETL_NULLPTR) + bool token_found = false; + size_t position = 0U; + TStringView view = last_view.value_or(TStringView()); + const_pointer begin_ptr = s.data(); + const_pointer end_ptr = begin_ptr + s.size(); + + while (!token_found) { - position = etl::distance(etl::addressof(*s.begin()), addressof(*last_view.begin()) + last_view.size()); + // Does the last view have valid data? + if (view.data() != ETL_NULLPTR) + { + position = etl::distance(begin_ptr, view.data() + view.size() + 1U); + + // Have we reached the end of the string? + if (position > s.size()) + { + return etl::optional(); + } + } + + // Look for the next token. + const_pointer first_ptr = begin_ptr + position; + const_pointer last_ptr = find_first_of(first_ptr, end_ptr, delimiters); + + view = TStringView(first_ptr, etl::distance(first_ptr, last_ptr)); + + token_found = ((view.size() != 0U) || !ignore_empty_tokens); } - typename TIString::const_iterator first = s.begin() + position; - typename TIString::const_iterator last; - - // Look for the start of the next token. - first = find_first_not_of(first, s.end(), delimiters); - last = find_first_of(first, s.end(), delimiters); - - size_t view_length = etl::distance(first, last); - - if (view_length != 0) - { - return TStringView(etl::addressof(*first), view_length); - } - else - { - return TStringView(); - } + return etl::optional(view); } //*************************************************************************** diff --git a/include/etl/version.h b/include/etl/version.h index 73a7b90c..0871e7dd 100644 --- a/include/etl/version.h +++ b/include/etl/version.h @@ -38,8 +38,8 @@ SOFTWARE. ///\ingroup utilities #define ETL_VERSION_MAJOR 18 -#define ETL_VERSION_MINOR 11 -#define ETL_VERSION_PATCH 1 +#define ETL_VERSION_MINOR 12 +#define ETL_VERSION_PATCH 0 #define ETL_VERSION ETL_STRINGIFY(ETL_VERSION_MAJOR) "." ETL_STRINGIFY(ETL_VERSION_MINOR) "." ETL_STRINGIFY(ETL_VERSION_PATCH) #define ETL_VERSION_W ETL_STRINGIFY(ETL_VERSION_MAJOR) L"." ETL_STRINGIFY(ETL_VERSION_MINOR) L"." ETL_STRINGIFY(ETL_VERSION_PATCH) #define ETL_VERSION_U16 ETL_STRINGIFY(ETL_VERSION_MAJOR) u"." ETL_STRINGIFY(ETL_VERSION_MINOR) u"." ETL_STRINGIFY(ETL_VERSION_PATCH) diff --git a/library.json b/library.json index 79dd239e..91c20055 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "Embedded Template Library", - "version": "18.11.1", + "version": "18.12.0", "authors": { "name": "John Wellbelove", "email": "john.wellbelove@etlcpp.com" diff --git a/library.properties b/library.properties index 6f3a4b28..f60cd055 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Embedded Template Library -version=18.11.1 +version=18.12.0 author= John Wellbelove maintainer=John Wellbelove license=MIT diff --git a/support/Release notes.txt b/support/Release notes.txt index df386dc0..742e2de9 100644 --- a/support/Release notes.txt +++ b/support/Release notes.txt @@ -1,3 +1,7 @@ +=============================================================================== +18.12.0 +Recoded string utility get_token() + =============================================================================== 18.11.1 Fix and optimise etl::list and etl::forward_list move constructors and assignment operators. diff --git a/test/test_string_utilities.cpp b/test/test_string_utilities.cpp index 6811ab9e..e47c5e17 100644 --- a/test/test_string_utilities.cpp +++ b/test/test_string_utilities.cpp @@ -46,7 +46,9 @@ namespace using IString = etl::istring; using StringView = etl::string_view; using Char = etl::istring::value_type; - using Vector = etl::vector; + using Vector = etl::vector; + + constexpr auto Whitespace = etl::whitespace_v; //************************************************************************* TEST(test_trim_whitespace_left_empty) @@ -65,8 +67,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -91,8 +93,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -117,8 +119,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -143,8 +145,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -169,8 +171,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -195,8 +197,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -232,8 +234,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -258,8 +260,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -284,8 +286,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -299,8 +301,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -326,8 +328,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -352,8 +354,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -378,8 +380,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -404,8 +406,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -430,8 +432,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -456,8 +458,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -482,8 +484,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -508,8 +510,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -534,8 +536,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -560,8 +562,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -586,8 +588,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -612,8 +614,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -638,8 +640,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -664,8 +666,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -690,8 +692,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -716,8 +718,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -742,8 +744,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -768,8 +770,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -794,8 +796,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -809,8 +811,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -846,8 +848,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -861,8 +863,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -973,45 +975,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1022,18 +1031,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1044,18 +1048,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1280,7 +1279,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1291,7 +1290,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1381,7 +1380,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1392,7 +1391,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1483,7 +1482,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1494,7 +1493,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1585,7 +1584,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1596,7 +1595,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_std.cpp b/test/test_string_utilities_std.cpp index 2d3073f9..8d61fb47 100644 --- a/test/test_string_utilities_std.cpp +++ b/test/test_string_utilities_std.cpp @@ -50,6 +50,8 @@ namespace using Char = std::string::value_type; using Vector = std::vector; + constexpr auto Whitespace = etl::whitespace_v; + //************************************************************************* TEST(test_trim_whitespace_left_empty) { @@ -67,8 +69,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -93,8 +95,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -119,8 +121,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -145,8 +147,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -171,8 +173,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -197,8 +199,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -234,8 +236,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -260,8 +262,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -286,8 +288,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -301,8 +303,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -328,8 +330,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -354,8 +356,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -380,8 +382,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -406,8 +408,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -432,8 +434,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -458,8 +460,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -484,8 +486,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -510,8 +512,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -536,8 +538,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -562,8 +564,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -588,8 +590,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -614,8 +616,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -640,8 +642,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -666,8 +668,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -692,8 +694,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -718,8 +720,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -744,8 +746,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -770,8 +772,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -796,8 +798,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -811,8 +813,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -848,8 +850,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -863,8 +865,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -975,45 +977,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1024,18 +1033,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1046,18 +1050,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1234,7 +1233,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1245,7 +1244,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1335,7 +1334,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1346,7 +1345,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1437,7 +1436,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1448,7 +1447,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1539,7 +1538,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1550,7 +1549,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_std_u16.cpp b/test/test_string_utilities_std_u16.cpp index 0a327a4c..59bff4f4 100644 --- a/test/test_string_utilities_std_u16.cpp +++ b/test/test_string_utilities_std_u16.cpp @@ -50,6 +50,8 @@ namespace using Char = std::wstring::value_type; using Vector = std::vector; + constexpr auto Whitespace = etl::whitespace_v; + //************************************************************************* TEST(test_trim_whitespace_left_empty) { @@ -67,8 +69,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -93,8 +95,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -119,8 +121,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -145,8 +147,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -171,8 +173,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -197,8 +199,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -234,8 +236,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -260,8 +262,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -286,8 +288,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -301,8 +303,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -328,8 +330,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -354,8 +356,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -380,8 +382,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -406,8 +408,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -432,8 +434,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -458,8 +460,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -484,8 +486,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -510,8 +512,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -536,8 +538,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -562,8 +564,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -588,8 +590,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -614,8 +616,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -640,8 +642,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -666,8 +668,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -692,8 +694,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -718,8 +720,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -744,8 +746,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -770,8 +772,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -796,8 +798,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -811,8 +813,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -848,8 +850,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -863,8 +865,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -975,45 +977,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1024,18 +1033,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1046,18 +1050,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1234,7 +1233,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1245,7 +1244,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1335,7 +1334,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1346,7 +1345,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1437,7 +1436,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1448,7 +1447,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1539,7 +1538,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1550,7 +1549,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_std_u32.cpp b/test/test_string_utilities_std_u32.cpp index e45f1c6a..fcca5986 100644 --- a/test/test_string_utilities_std_u32.cpp +++ b/test/test_string_utilities_std_u32.cpp @@ -50,6 +50,8 @@ namespace using Char = std::u32string::value_type; using Vector = std::vector; + constexpr auto Whitespace = etl::whitespace_v; + //************************************************************************* TEST(test_trim_whitespace_left_empty) { @@ -67,8 +69,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -93,8 +95,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -119,8 +121,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -145,8 +147,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -171,8 +173,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -197,8 +199,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -234,8 +236,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -260,8 +262,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -286,8 +288,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -301,8 +303,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -328,8 +330,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -354,8 +356,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -380,8 +382,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -406,8 +408,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -432,8 +434,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -458,8 +460,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -484,8 +486,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -510,8 +512,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -536,8 +538,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -562,8 +564,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -588,8 +590,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -614,8 +616,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -640,8 +642,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -666,8 +668,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -692,8 +694,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -718,8 +720,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -744,8 +746,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -770,8 +772,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -796,8 +798,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -811,8 +813,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -848,8 +850,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -863,8 +865,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -975,45 +977,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1024,18 +1033,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1046,18 +1050,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1234,7 +1233,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1245,7 +1244,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1335,7 +1334,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1346,7 +1345,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1437,7 +1436,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1448,7 +1447,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1539,7 +1538,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1550,7 +1549,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_std_wchar_t.cpp b/test/test_string_utilities_std_wchar_t.cpp index 5506a2c3..eed87520 100644 --- a/test/test_string_utilities_std_wchar_t.cpp +++ b/test/test_string_utilities_std_wchar_t.cpp @@ -50,6 +50,8 @@ namespace using Char = std::wstring::value_type; using Vector = std::vector; + constexpr auto Whitespace = etl::whitespace_v; + //************************************************************************* TEST(test_trim_whitespace_left_empty) { @@ -67,8 +69,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -93,8 +95,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -119,8 +121,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -145,8 +147,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -171,8 +173,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -197,8 +199,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -234,8 +236,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -260,8 +262,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -286,8 +288,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -301,8 +303,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -328,8 +330,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -354,8 +356,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -380,8 +382,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -406,8 +408,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -432,8 +434,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -458,8 +460,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -484,8 +486,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -510,8 +512,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -536,8 +538,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -562,8 +564,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -588,8 +590,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -614,8 +616,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -640,8 +642,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -666,8 +668,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -692,8 +694,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -718,8 +720,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -744,8 +746,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -770,8 +772,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -796,8 +798,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -811,8 +813,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -848,8 +850,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -863,8 +865,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -975,45 +977,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1024,18 +1033,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1046,18 +1050,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1234,7 +1233,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1245,7 +1244,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1335,7 +1334,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1346,7 +1345,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1437,7 +1436,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1448,7 +1447,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1539,7 +1538,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1550,7 +1549,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_u16.cpp b/test/test_string_utilities_u16.cpp index b9c0d25c..d801789e 100644 --- a/test/test_string_utilities_u16.cpp +++ b/test/test_string_utilities_u16.cpp @@ -46,7 +46,9 @@ namespace using IString = etl::iu16string; using StringView = etl::u16string_view; using Char = etl::iu16string::value_type; - using Vector = etl::vector; + using Vector = etl::vector; + + constexpr auto Whitespace = etl::whitespace_v; //************************************************************************* TEST(test_trim_whitespace_left_empty) @@ -65,8 +67,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -91,8 +93,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -117,8 +119,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -143,8 +145,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -169,8 +171,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -195,8 +197,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -232,8 +234,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -258,8 +260,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -284,8 +286,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -299,8 +301,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -326,8 +328,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -352,8 +354,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -378,8 +380,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -404,8 +406,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -430,8 +432,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -456,8 +458,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -482,8 +484,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -508,8 +510,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -534,8 +536,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -560,8 +562,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -586,8 +588,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -612,8 +614,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -638,8 +640,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -664,8 +666,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -690,8 +692,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -716,8 +718,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -742,8 +744,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -768,8 +770,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -794,8 +796,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -809,8 +811,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -846,8 +848,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -861,8 +863,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -973,45 +975,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1022,18 +1031,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1044,18 +1048,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1280,7 +1279,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1291,7 +1290,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1381,7 +1380,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1392,7 +1391,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1483,7 +1482,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1494,7 +1493,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1585,7 +1584,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1596,7 +1595,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_u32.cpp b/test/test_string_utilities_u32.cpp index 43772229..ccb32a3b 100644 --- a/test/test_string_utilities_u32.cpp +++ b/test/test_string_utilities_u32.cpp @@ -46,7 +46,9 @@ namespace using IString = etl::iu32string; using StringView = etl::u32string_view; using Char = etl::iu32string::value_type; - using Vector = etl::vector; + using Vector = etl::vector; + + constexpr auto Whitespace = etl::whitespace_v; //************************************************************************* TEST(test_trim_whitespace_left_empty) @@ -65,8 +67,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -91,8 +93,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -117,8 +119,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -143,8 +145,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -169,8 +171,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -195,8 +197,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -232,8 +234,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -258,8 +260,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -284,8 +286,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -299,8 +301,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -326,8 +328,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -352,8 +354,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -378,8 +380,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -404,8 +406,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -430,8 +432,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -456,8 +458,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -482,8 +484,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -508,8 +510,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -534,8 +536,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -560,8 +562,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -586,8 +588,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -612,8 +614,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -638,8 +640,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -664,8 +666,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -690,8 +692,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -716,8 +718,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -742,8 +744,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -768,8 +770,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -794,8 +796,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -809,8 +811,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -846,8 +848,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -861,8 +863,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -973,45 +975,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1022,18 +1031,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1044,18 +1048,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1280,7 +1279,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1291,7 +1290,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1381,7 +1380,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1392,7 +1391,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1483,7 +1482,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1494,7 +1493,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1585,7 +1584,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1596,7 +1595,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World")); diff --git a/test/test_string_utilities_wchar_t.cpp b/test/test_string_utilities_wchar_t.cpp index 8fa9fb4b..262df8b4 100644 --- a/test/test_string_utilities_wchar_t.cpp +++ b/test/test_string_utilities_wchar_t.cpp @@ -46,7 +46,9 @@ namespace using IString = etl::iwstring; using StringView = etl::wstring_view; using Char = etl::iwstring::value_type; - using Vector = etl::vector; + using Vector = etl::vector; + + constexpr auto Whitespace = etl::whitespace_v; //************************************************************************* TEST(test_trim_whitespace_left_empty) @@ -65,8 +67,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -91,8 +93,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -117,8 +119,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_left(textview); @@ -143,8 +145,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -169,8 +171,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -195,8 +197,8 @@ namespace String text(STR("Hello World\t\n\r\f\v ")); String expected(STR("Hello World\t\n\r\f\v ")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_left(textview, STR(" \t\n\r\f\v")); @@ -232,8 +234,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -258,8 +260,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -284,8 +286,8 @@ namespace String text(STR("Hello Worldqztfp")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("XYZ")); @@ -299,8 +301,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello Worldqztfp")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_left(textview, STR("Hel")); @@ -326,8 +328,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -352,8 +354,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -378,8 +380,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace_right(textview); @@ -404,8 +406,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -430,8 +432,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -456,8 +458,8 @@ namespace String text(STR(" \t\n\r\f\vHello World")); String expected(STR(" \t\n\r\f\vHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view_right(textview, STR(" \t\n\r\f\v")); @@ -482,8 +484,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -508,8 +510,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("qztfpHello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("rld")); @@ -534,8 +536,8 @@ namespace String text(STR("qztfpHello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_right(textview, STR("XYZ")); @@ -560,8 +562,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -586,8 +588,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -612,8 +614,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view_whitespace(textview); @@ -638,8 +640,8 @@ namespace String text(STR("")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -664,8 +666,8 @@ namespace String text(STR(" \t\n\r\f\vHello World\t\n\r\f\v ")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -690,8 +692,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_from_view(textview, STR(" \t\n\r\f\v")); @@ -716,8 +718,8 @@ namespace String text(STR("qztfpHello Worldqztfp")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -742,8 +744,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("Hd")); @@ -768,8 +770,8 @@ namespace String text(STR("Hello World")); String expected(STR("")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::trim_view(textview, STR("XYZ")); @@ -794,8 +796,8 @@ namespace String text(STR("Hello World")); String expected(STR("World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, expected.size()); @@ -809,8 +811,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::right_n_view(textview, text.size() * 2U); @@ -846,8 +848,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, expected.size()); @@ -861,8 +863,8 @@ namespace String text(STR("Hello World")); String expected(STR("Hello World")); - StringView textview(text); - StringView expectedview(expected); + StringView textview(text.data(), text.size()); + StringView expectedview(expected.data(), expected.size()); StringView view = etl::left_n_view(textview, text.size() * 2U); @@ -973,45 +975,52 @@ namespace } //************************************************************************* - TEST(test_get_token_delimiters) + TEST(test_get_token_delimiters_ignore_empty_tokens) { - String text(STR(" The cat.sat, on;the:mat .,;:")); + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(6U, tokens.size()); } + //************************************************************************* + TEST(test_get_token_delimiters_keep_empty_tokens) + { + String text(STR(",,,The,cat,sat,,on,the,mat,,,")); + Vector tokens; + + StringView textview(text.data(), text.size()); + etl::optional token; + + while (token = etl::get_token(text, STR(","), token, false)) + { + tokens.emplace_back(token.value()); + } + + CHECK_EQUAL(13U, tokens.size()); + } + //************************************************************************* TEST(test_get_token_delimiters_nothing_to_do) { String text(STR("")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, Whitespace, token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1022,18 +1031,13 @@ namespace String text(STR(" ., ;: .,;:")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(" .,;:"), token, true)) { - token = etl::get_token(text, STR(" .,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(0U, tokens.size()); } @@ -1044,18 +1048,13 @@ namespace String text(STR("The cat sat on the mat")); Vector tokens; - StringView textview(text); - StringView token; + StringView textview(text.data(), text.size()); + etl::optional token; - do + while (token = etl::get_token(text, STR(","), token, false)) { - token = etl::get_token(text, STR(".,;:"), token); - - if (!token.empty()) - { - tokens.emplace_back(token.begin(), token.end()); - } - } while (!token.empty()); + tokens.emplace_back(token.value()); + } CHECK_EQUAL(1U, tokens.size()); } @@ -1280,7 +1279,7 @@ namespace TEST(test_find_first_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("Hel")); @@ -1291,7 +1290,7 @@ namespace TEST(test_find_first_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_of(textview, STR("xyz")); @@ -1381,7 +1380,7 @@ namespace TEST(test_find_first_not_of_string_view) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abc")); @@ -1392,7 +1391,7 @@ namespace TEST(test_find_first_not_of_string_view_not_found) { const String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_first_not_of(textview, STR("abcHello World")); @@ -1483,7 +1482,7 @@ namespace TEST(test_find_last_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("rld")); @@ -1494,7 +1493,7 @@ namespace TEST(test_find_last_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_of(textview, STR("xyz")); @@ -1585,7 +1584,7 @@ namespace TEST(test_find_last_not_of_string_view) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abc")); @@ -1596,7 +1595,7 @@ namespace TEST(test_find_last_not_of_string_view_not_found) { String text(STR("abcHello Worldabc")); - StringView textview(text); + StringView textview(text.data(), text.size()); StringView::const_iterator itr = etl::find_last_not_of(textview, STR("abcHello World"));