Fix overeager assertion
authorTudor Bosman <tudorb@fb.com>
Thu, 15 Aug 2013 21:49:47 +0000 (14:49 -0700)
committerSara Golemon <sgolemon@fb.com>
Wed, 28 Aug 2013 21:30:12 +0000 (14:30 -0700)
Summary: Also important spelling mistakes.
@override-unit-failures

Test Plan: string_test

Reviewed By: tjackson@fb.com

FB internal diff: D930037

folly/String-inl.h
folly/test/StringTest.cpp

index c608398ac7375263a2b54cc206ad5da82f697596..e61ef33217c5655b87fcdff8ae894c23495af197 100644 (file)
@@ -300,7 +300,7 @@ template<> struct OutputConverter<StringPiece> {
 template<class OutStringT, class DelimT, class OutputIterator>
 void internalSplit(DelimT delim, StringPiece sp, OutputIterator out,
     bool ignoreEmpty) {
-  assert(sp.start() != nullptr);
+  assert(sp.empty() || sp.start() != nullptr);
 
   const char* s = sp.start();
   const size_t strSize = sp.size();
index b0ff972bae0134716dd1f82f8665b25f55c67fd8..aac79a8ac89a1877d209e133801e1d561cbfef66 100644 (file)
@@ -481,6 +481,13 @@ void splitTest() {
   EXPECT_EQ(parts[2], "c");
   parts.clear();
 
+  folly::split(',', StringPiece("a,b,c"), parts);
+  EXPECT_EQ(parts.size(), 3);
+  EXPECT_EQ(parts[0], "a");
+  EXPECT_EQ(parts[1], "b");
+  EXPECT_EQ(parts[2], "c");
+  parts.clear();
+
   folly::split(',', string("a,b,c"), parts);
   EXPECT_EQ(parts.size(), 3);
   EXPECT_EQ(parts[0], "a");
@@ -559,16 +566,25 @@ void splitTest() {
   EXPECT_EQ(parts[0], "");
   parts.clear();
 
+  folly::split("a", StringPiece(), parts, true);
+  EXPECT_EQ(parts.size(), 0);
+  parts.clear();
+
+  folly::split("a", StringPiece(), parts);
+  EXPECT_EQ(parts.size(), 1);
+  EXPECT_EQ(parts[0], "");
+  parts.clear();
+
   folly::split("a", "abcdefg", parts, true);
   EXPECT_EQ(parts.size(), 1);
   EXPECT_EQ(parts[0], "bcdefg");
   parts.clear();
 
-  orig = "All, , your bases, are , , belong to us";
+  orig = "All, , your base, are , , belong to us";
   folly::split(", ", orig, parts, true);
   EXPECT_EQ(parts.size(), 4);
   EXPECT_EQ(parts[0], "All");
-  EXPECT_EQ(parts[1], "your bases");
+  EXPECT_EQ(parts[1], "your base");
   EXPECT_EQ(parts[2], "are ");
   EXPECT_EQ(parts[3], "belong to us");
   parts.clear();
@@ -576,7 +592,7 @@ void splitTest() {
   EXPECT_EQ(parts.size(), 6);
   EXPECT_EQ(parts[0], "All");
   EXPECT_EQ(parts[1], "");
-  EXPECT_EQ(parts[2], "your bases");
+  EXPECT_EQ(parts[2], "your base");
   EXPECT_EQ(parts[3], "are ");
   EXPECT_EQ(parts[4], "");
   EXPECT_EQ(parts[5], "belong to us");
@@ -689,11 +705,11 @@ void piecesTest() {
   EXPECT_EQ(pieces[0], "bcdefg");
   pieces.clear();
 
-  orig = "All, , your bases, are , , belong to us";
+  orig = "All, , your base, are , , belong to us";
   folly::split(", ", orig, pieces, true);
   EXPECT_EQ(pieces.size(), 4);
   EXPECT_EQ(pieces[0], "All");
-  EXPECT_EQ(pieces[1], "your bases");
+  EXPECT_EQ(pieces[1], "your base");
   EXPECT_EQ(pieces[2], "are ");
   EXPECT_EQ(pieces[3], "belong to us");
   pieces.clear();
@@ -701,7 +717,7 @@ void piecesTest() {
   EXPECT_EQ(pieces.size(), 6);
   EXPECT_EQ(pieces[0], "All");
   EXPECT_EQ(pieces[1], "");
-  EXPECT_EQ(pieces[2], "your bases");
+  EXPECT_EQ(pieces[2], "your base");
   EXPECT_EQ(pieces[3], "are ");
   EXPECT_EQ(pieces[4], "");
   EXPECT_EQ(pieces[5], "belong to us");