diff options
author | 2021-02-08 17:46:15 -0800 | |
---|---|---|
committer | 2021-02-10 01:39:40 +0000 | |
commit | 60117aeeffda3d01a5314984694ae3d6d4588fc1 (patch) | |
tree | 12f5062c456de8b50418a8fb74c801c8ccc5b690 /libartbase/base/utils_test.cc | |
parent | c7ac91b21d1a15c14e29d69ff02b48c485962b0d (diff) |
Improve string splitting
String splitting is something that we often have to do but our support
code for doing so is not the best. Add support for using
std::string_view in many circumstances and add support for making an
iterator of splits without allocation.
Test: ./test.py --host
Change-Id: I1b56b7e10926a064b64011326b508dd4af707df9
Diffstat (limited to 'libartbase/base/utils_test.cc')
-rw-r--r-- | libartbase/base/utils_test.cc | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/libartbase/base/utils_test.cc b/libartbase/base/utils_test.cc index f67ada261e..09705fe862 100644 --- a/libartbase/base/utils_test.cc +++ b/libartbase/base/utils_test.cc @@ -15,6 +15,7 @@ */ #include "utils.h" +#include "stl_util.h" #include "gtest/gtest.h" @@ -41,9 +42,13 @@ TEST_F(UtilsTest, PrettySize) { EXPECT_EQ("512B", PrettySize(512)); } +void Split(const char* arr, char s, std::vector<std::string_view>* sv) { + Split<std::string_view>(std::string_view(arr), s, sv); +} + TEST_F(UtilsTest, Split) { - std::vector<std::string> actual; - std::vector<std::string> expected; + std::vector<std::string_view> actual; + std::vector<std::string_view> expected; expected.clear(); @@ -115,4 +120,48 @@ TEST_F(UtilsTest, GetProcessStatus) { EXPECT_EQ("<unknown>", GetProcessStatus("InvalidFieldName")); } +TEST_F(UtilsTest, StringSplit) { + auto range = SplitString("[ab[c[[d[e[", '['); + auto it = range.begin(); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, ""); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "ab"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "c"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, ""); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "d"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "e"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, ""); + EXPECT_TRUE(it == range.end()); +} + +TEST_F(UtilsTest, StringSplit2) { + auto range = SplitString("ab[c[[d[e", '['); + auto it = range.begin(); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "ab"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "c"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, ""); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "d"); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, "e"); + EXPECT_TRUE(it == range.end()); +} + +TEST_F(UtilsTest, StringSplit3) { + auto range = SplitString("", '['); + auto it = range.begin(); + EXPECT_FALSE(it == range.end()); + EXPECT_EQ(*it++, ""); + EXPECT_TRUE(it == range.end()); +} + } // namespace art |