Sync with upstream OpenBSD strstr().
Bug: http://b/124855136
Test: treehugger
Change-Id: I6cbeb82bc0e418f50e6c171ac4e38e335c448db8
diff --git a/tests/string_test.cpp b/tests/string_test.cpp
index 335d33b..0ed0598 100644
--- a/tests/string_test.cpp
+++ b/tests/string_test.cpp
@@ -1548,11 +1548,31 @@
}
TEST(STRING_TEST, strstr_smoke) {
- const char* haystack = "big daddy/giant haystacks";
- ASSERT_EQ(haystack, strstr(haystack, ""));
+ const char* haystack = "big daddy/giant haystacks!";
+
+ // The current strstr() implementation has special cases for needles of
+ // lengths 0, 1, 2, 3, and 4, plus a long needle case. We test matches at the
+ // beginning, middle, and end of the haystack.
+
+ ASSERT_EQ(haystack + 0, strstr(haystack, ""));
+
ASSERT_EQ(haystack + 0, strstr(haystack, "b"));
- ASSERT_EQ(haystack + 1, strstr(haystack, "i"));
- ASSERT_EQ(haystack + 4, strstr(haystack, "da"));
+ ASSERT_EQ(haystack + 0, strstr(haystack, "bi"));
+ ASSERT_EQ(haystack + 0, strstr(haystack, "big"));
+ ASSERT_EQ(haystack + 0, strstr(haystack, "big "));
+ ASSERT_EQ(haystack + 0, strstr(haystack, "big d"));
+
+ ASSERT_EQ(haystack + 2, strstr(haystack, "g"));
+ ASSERT_EQ(haystack + 10, strstr(haystack, "gi"));
+ ASSERT_EQ(haystack + 10, strstr(haystack, "gia"));
+ ASSERT_EQ(haystack + 10, strstr(haystack, "gian"));
+ ASSERT_EQ(haystack + 10, strstr(haystack, "giant"));
+
+ ASSERT_EQ(haystack + 25, strstr(haystack, "!"));
+ ASSERT_EQ(haystack + 24, strstr(haystack, "s!"));
+ ASSERT_EQ(haystack + 23, strstr(haystack, "ks!"));
+ ASSERT_EQ(haystack + 22, strstr(haystack, "cks!"));
+ ASSERT_EQ(haystack + 21, strstr(haystack, "acks!"));
}
TEST(STRING_TEST, strcasestr_smoke) {