Skip to content

Commit b78d36d

Browse files
authored
Fix a bug in the splitString() function (#83)
1 parent 5f6fa96 commit b78d36d

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

trantor/unittests/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ find_package(GTest REQUIRED)
22
add_executable(msgbuffer_unittest MsgBufferUnittest.cc)
33
add_executable(inetaddress_unittest InetAddressUnittest.cc)
44
add_executable(date_unittest DateUnittest.cc)
5-
set(UNITTEST_TARGETS msgbuffer_unittest inetaddress_unittest date_unittest)
5+
add_executable(split_string_unittest splitStringUnittest.cc)
6+
set(UNITTEST_TARGETS
7+
msgbuffer_unittest
8+
inetaddress_unittest
9+
date_unittest
10+
split_string_unittest)
611
set_property(TARGET ${UNITTEST_TARGETS} PROPERTY CXX_STANDARD 14)
712
set_property(TARGET ${UNITTEST_TARGETS} PROPERTY CXX_STANDARD_REQUIRED ON)
813
set_property(TARGET ${UNITTEST_TARGETS} PROPERTY CXX_EXTENSIONS OFF)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <trantor/utils/Date.h>
2+
#include <gtest/gtest.h>
3+
#include <trantor/utils/Funcs.h>
4+
#include <iostream>
5+
using namespace trantor;
6+
TEST(splitString, split_string)
7+
{
8+
std::string originString = "1,2,3";
9+
auto out = splitString(originString, ",");
10+
EXPECT_EQ(out.size(), 3);
11+
originString = ",1,2,3";
12+
out = splitString(originString, ",");
13+
EXPECT_EQ(out.size(), 4);
14+
EXPECT_TRUE(out[0].empty());
15+
originString = ",1,2,3,";
16+
out = splitString(originString, ",");
17+
EXPECT_EQ(out.size(), 5);
18+
EXPECT_TRUE(out[0].empty());
19+
originString = ",1,2,3,";
20+
out = splitString(originString, ":");
21+
EXPECT_EQ(out.size(), 1);
22+
originString = "trantor::splitString";
23+
out = splitString(originString, "::");
24+
EXPECT_EQ(out.size(), 2);
25+
EXPECT_STREQ(out[0].data(), "trantor");
26+
EXPECT_STREQ(out[1].data(), "splitString");
27+
originString = "trantor::::splitString";
28+
out = splitString(originString, "::");
29+
EXPECT_EQ(out.size(), 3);
30+
EXPECT_STREQ(out[0].data(), "trantor");
31+
EXPECT_STREQ(out[1].data(), "");
32+
EXPECT_STREQ(out[2].data(), "splitString");
33+
originString = "trantor:::splitString";
34+
out = splitString(originString, "::");
35+
EXPECT_EQ(out.size(), 2);
36+
EXPECT_STREQ(out[0].data(), "trantor");
37+
EXPECT_STREQ(out[1].data(), ":splitString");
38+
originString = "trantor:::splitString";
39+
out = splitString(originString, "trantor:::splitString");
40+
EXPECT_EQ(out.size(), 2);
41+
EXPECT_STREQ(out[0].data(), "");
42+
EXPECT_STREQ(out[1].data(), "");
43+
}
44+
int main(int argc, char **argv)
45+
{
46+
testing::InitGoogleTest(&argc, argv);
47+
return RUN_ALL_TESTS();
48+
}

trantor/utils/Funcs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ inline std::vector<std::string> splitString(const std::string &s,
4040
while ((next = s.find(delimiter, last)) != std::string::npos)
4141
{
4242
v.push_back(s.substr(last, next - last));
43-
last = next + 1;
43+
last = next + delimiter.length();
4444
}
4545
v.push_back(s.substr(last));
4646
return std::move(v);

0 commit comments

Comments
 (0)