summaryrefslogtreecommitdiff
path: root/tests/string_test.cpp
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2019-11-22 11:15:42 -0800
committerElliott Hughes <enh@google.com>2019-11-22 11:16:23 -0800
commitc6b38aefa71b773d4b077ba2db2af7c3604b9cd6 (patch)
tree782074f038c271448de7624fa4a5aee0cdb97c81 /tests/string_test.cpp
parent1134b695bc3e8b7cdebf4d7d8238a58891a09045 (diff)
Sync with upstream OpenBSD strstr().
Bug: http://b/124855136 Test: treehugger Change-Id: I6cbeb82bc0e418f50e6c171ac4e38e335c448db8
Diffstat (limited to 'tests/string_test.cpp')
-rw-r--r--tests/string_test.cpp28
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) {