diff options
Diffstat (limited to 'tests/string_test.cpp')
-rw-r--r-- | tests/string_test.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/tests/string_test.cpp b/tests/string_test.cpp index 335d33bd6..0ed0598f6 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -1548,11 +1548,31 @@ TEST(STRING_TEST, memmem_smoke) { } 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) { |