summaryrefslogtreecommitdiff
path: root/libartbase/base/utils_test.cc
diff options
context:
space:
mode:
author Alex Light <allight@google.com> 2021-02-08 17:46:15 -0800
committer Alex Light <allight@google.com> 2021-02-10 01:39:40 +0000
commit60117aeeffda3d01a5314984694ae3d6d4588fc1 (patch)
tree12f5062c456de8b50418a8fb74c801c8ccc5b690 /libartbase/base/utils_test.cc
parentc7ac91b21d1a15c14e29d69ff02b48c485962b0d (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.cc53
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