xref: /aosp_15_r20/external/abseil-cpp/absl/strings/match_test.cc (revision 9356374a3709195abf420251b3e825997ff56c0f)
1*9356374aSAndroid Build Coastguard Worker // Copyright 2017 The Abseil Authors.
2*9356374aSAndroid Build Coastguard Worker //
3*9356374aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*9356374aSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*9356374aSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*9356374aSAndroid Build Coastguard Worker //
7*9356374aSAndroid Build Coastguard Worker //      https://www.apache.org/licenses/LICENSE-2.0
8*9356374aSAndroid Build Coastguard Worker //
9*9356374aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*9356374aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*9356374aSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9356374aSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*9356374aSAndroid Build Coastguard Worker // limitations under the License.
14*9356374aSAndroid Build Coastguard Worker 
15*9356374aSAndroid Build Coastguard Worker #include "absl/strings/match.h"
16*9356374aSAndroid Build Coastguard Worker 
17*9356374aSAndroid Build Coastguard Worker #include <string>
18*9356374aSAndroid Build Coastguard Worker 
19*9356374aSAndroid Build Coastguard Worker #include "gtest/gtest.h"
20*9356374aSAndroid Build Coastguard Worker #include "absl/strings/string_view.h"
21*9356374aSAndroid Build Coastguard Worker 
22*9356374aSAndroid Build Coastguard Worker namespace {
23*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,StartsWith)24*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, StartsWith) {
25*9356374aSAndroid Build Coastguard Worker   const std::string s1("123\0abc", 7);
26*9356374aSAndroid Build Coastguard Worker   const absl::string_view a("foobar");
27*9356374aSAndroid Build Coastguard Worker   const absl::string_view b(s1);
28*9356374aSAndroid Build Coastguard Worker   const absl::string_view e;
29*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(a, a));
30*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(a, "foo"));
31*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(a, e));
32*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(b, s1));
33*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(b, b));
34*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(b, e));
35*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(e, ""));
36*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StartsWith(a, b));
37*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StartsWith(b, a));
38*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StartsWith(e, a));
39*9356374aSAndroid Build Coastguard Worker }
40*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,EndsWith)41*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, EndsWith) {
42*9356374aSAndroid Build Coastguard Worker   const std::string s1("123\0abc", 7);
43*9356374aSAndroid Build Coastguard Worker   const absl::string_view a("foobar");
44*9356374aSAndroid Build Coastguard Worker   const absl::string_view b(s1);
45*9356374aSAndroid Build Coastguard Worker   const absl::string_view e;
46*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(a, a));
47*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(a, "bar"));
48*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(a, e));
49*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(b, s1));
50*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(b, b));
51*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(b, e));
52*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(e, ""));
53*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EndsWith(a, b));
54*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EndsWith(b, a));
55*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EndsWith(e, a));
56*9356374aSAndroid Build Coastguard Worker }
57*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,Contains)58*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, Contains) {
59*9356374aSAndroid Build Coastguard Worker   absl::string_view a("abcdefg");
60*9356374aSAndroid Build Coastguard Worker   absl::string_view b("abcd");
61*9356374aSAndroid Build Coastguard Worker   absl::string_view c("efg");
62*9356374aSAndroid Build Coastguard Worker   absl::string_view d("gh");
63*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(a, a));
64*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(a, b));
65*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(a, c));
66*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains(a, d));
67*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains("", ""));
68*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains("abc", ""));
69*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains("", "a"));
70*9356374aSAndroid Build Coastguard Worker }
71*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,ContainsChar)72*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, ContainsChar) {
73*9356374aSAndroid Build Coastguard Worker   absl::string_view a("abcdefg");
74*9356374aSAndroid Build Coastguard Worker   absl::string_view b("abcd");
75*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(a, 'a'));
76*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(a, 'b'));
77*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(a, 'e'));
78*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains(a, 'h'));
79*9356374aSAndroid Build Coastguard Worker 
80*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(b, 'a'));
81*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(b, 'b'));
82*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains(b, 'e'));
83*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains(b, 'h'));
84*9356374aSAndroid Build Coastguard Worker 
85*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains("", 'a'));
86*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains("", 'a'));
87*9356374aSAndroid Build Coastguard Worker }
88*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,ContainsNull)89*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, ContainsNull) {
90*9356374aSAndroid Build Coastguard Worker   const std::string s = "foo";
91*9356374aSAndroid Build Coastguard Worker   const char* cs = "foo";
92*9356374aSAndroid Build Coastguard Worker   const absl::string_view sv("foo");
93*9356374aSAndroid Build Coastguard Worker   const absl::string_view sv2("foo\0bar", 4);
94*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(s, "foo");
95*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(sv, "foo");
96*9356374aSAndroid Build Coastguard Worker   EXPECT_NE(sv2, "foo");
97*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWith(s, sv));
98*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWith(cs, sv));
99*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContains(cs, sv));
100*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContains(cs, sv2));
101*9356374aSAndroid Build Coastguard Worker }
102*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,EqualsIgnoreCase)103*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, EqualsIgnoreCase) {
104*9356374aSAndroid Build Coastguard Worker   std::string text = "the";
105*9356374aSAndroid Build Coastguard Worker   absl::string_view data(text);
106*9356374aSAndroid Build Coastguard Worker 
107*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EqualsIgnoreCase(data, "The"));
108*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EqualsIgnoreCase(data, "THE"));
109*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EqualsIgnoreCase(data, "the"));
110*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EqualsIgnoreCase(data, "Quick"));
111*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EqualsIgnoreCase(data, "then"));
112*9356374aSAndroid Build Coastguard Worker }
113*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,StartsWithIgnoreCase)114*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, StartsWithIgnoreCase) {
115*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWithIgnoreCase("foo", "foo"));
116*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWithIgnoreCase("foo", "Fo"));
117*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StartsWithIgnoreCase("foo", ""));
118*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StartsWithIgnoreCase("foo", "fooo"));
119*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StartsWithIgnoreCase("", "fo"));
120*9356374aSAndroid Build Coastguard Worker }
121*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,EndsWithIgnoreCase)122*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, EndsWithIgnoreCase) {
123*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWithIgnoreCase("foo", "foo"));
124*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWithIgnoreCase("foo", "Oo"));
125*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::EndsWithIgnoreCase("foo", ""));
126*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EndsWithIgnoreCase("foo", "fooo"));
127*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::EndsWithIgnoreCase("", "fo"));
128*9356374aSAndroid Build Coastguard Worker }
129*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,ContainsIgnoreCase)130*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, ContainsIgnoreCase) {
131*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("foo", "foo"));
132*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("FOO", "Foo"));
133*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("--FOO", "Foo"));
134*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("FOO--", "Foo"));
135*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase("BAR", "Foo"));
136*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase("BAR", "Foo"));
137*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("123456", "123456"));
138*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("123456", "234"));
139*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("", ""));
140*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase("abc", ""));
141*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase("", "a"));
142*9356374aSAndroid Build Coastguard Worker }
143*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,ContainsCharIgnoreCase)144*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, ContainsCharIgnoreCase) {
145*9356374aSAndroid Build Coastguard Worker   absl::string_view a("AaBCdefg!");
146*9356374aSAndroid Build Coastguard Worker   absl::string_view b("AaBCd!");
147*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, 'a'));
148*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, 'A'));
149*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, 'b'));
150*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, 'B'));
151*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, 'e'));
152*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, 'E'));
153*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(a, 'h'));
154*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(a, 'H'));
155*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(a, '!'));
156*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(a, '?'));
157*9356374aSAndroid Build Coastguard Worker 
158*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(b, 'a'));
159*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(b, 'A'));
160*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(b, 'b'));
161*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(b, 'B'));
162*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(b, 'e'));
163*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(b, 'E'));
164*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(b, 'h'));
165*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(b, 'H'));
166*9356374aSAndroid Build Coastguard Worker   EXPECT_TRUE(absl::StrContainsIgnoreCase(b, '!'));
167*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase(b, '?'));
168*9356374aSAndroid Build Coastguard Worker 
169*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase("", 'a'));
170*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase("", 'A'));
171*9356374aSAndroid Build Coastguard Worker   EXPECT_FALSE(absl::StrContainsIgnoreCase("", '0'));
172*9356374aSAndroid Build Coastguard Worker }
173*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefix)174*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefix) {
175*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("", ""), "");
176*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("", "abc"), "");
177*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("abc", ""), "");
178*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("ab", "abc"), "ab");
179*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("abc", "ab"), "ab");
180*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("abc", "abd"), "ab");
181*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("abc", "abcd"), "abc");
182*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("abcd", "abcd"), "abcd");
183*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix("abcd", "efgh"), "");
184*9356374aSAndroid Build Coastguard Worker 
185*9356374aSAndroid Build Coastguard Worker   // "abcde" v. "abc" but in the middle of other data
186*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(
187*9356374aSAndroid Build Coastguard Worker                 absl::string_view("1234 abcdef").substr(5, 5),
188*9356374aSAndroid Build Coastguard Worker                 absl::string_view("5678 abcdef").substr(5, 3)),
189*9356374aSAndroid Build Coastguard Worker             "abc");
190*9356374aSAndroid Build Coastguard Worker }
191*9356374aSAndroid Build Coastguard Worker 
192*9356374aSAndroid Build Coastguard Worker // Since the little-endian implementation involves a bit of if-else and various
193*9356374aSAndroid Build Coastguard Worker // return paths, the following tests aims to provide full test coverage of the
194*9356374aSAndroid Build Coastguard Worker // implementation.
TEST(MatchTest,FindLongestCommonPrefixLoad16Mismatch)195*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixLoad16Mismatch) {
196*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "abcdefgh";
197*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "abcde_";
198*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "abcde");
199*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "abcde");
200*9356374aSAndroid Build Coastguard Worker }
201*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixLoad16MatchesNoLast)202*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixLoad16MatchesNoLast) {
203*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "abcdef";
204*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "abcdef";
205*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "abcdef");
206*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "abcdef");
207*9356374aSAndroid Build Coastguard Worker }
208*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixLoad16MatchesLastCharMismatches)209*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixLoad16MatchesLastCharMismatches) {
210*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "abcdefg";
211*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "abcdef_h";
212*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "abcdef");
213*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "abcdef");
214*9356374aSAndroid Build Coastguard Worker }
215*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixLoad16MatchesLastMatches)216*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixLoad16MatchesLastMatches) {
217*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "abcde";
218*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "abcdefgh";
219*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "abcde");
220*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "abcde");
221*9356374aSAndroid Build Coastguard Worker }
222*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixSize8Load64Mismatches)223*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixSize8Load64Mismatches) {
224*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "abcdefghijk";
225*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "abcde_g_";
226*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "abcde");
227*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "abcde");
228*9356374aSAndroid Build Coastguard Worker }
229*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixSize8Load64Matches)230*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixSize8Load64Matches) {
231*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "abcdefgh";
232*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "abcdefgh";
233*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "abcdefgh");
234*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "abcdefgh");
235*9356374aSAndroid Build Coastguard Worker }
236*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixSize15Load64Mismatches)237*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixSize15Load64Mismatches) {
238*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "012345670123456";
239*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "0123456701_34_6";
240*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "0123456701");
241*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "0123456701");
242*9356374aSAndroid Build Coastguard Worker }
243*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixSize15Load64Matches)244*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixSize15Load64Matches) {
245*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "012345670123456";
246*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "0123456701234567";
247*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "012345670123456");
248*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "012345670123456");
249*9356374aSAndroid Build Coastguard Worker }
250*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixSizeFirstByteOfLast8BytesMismatch)251*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixSizeFirstByteOfLast8BytesMismatch) {
252*9356374aSAndroid Build Coastguard Worker   const std::string x1 = "012345670123456701234567";
253*9356374aSAndroid Build Coastguard Worker   const std::string x2 = "0123456701234567_1234567";
254*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), "0123456701234567");
255*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), "0123456701234567");
256*9356374aSAndroid Build Coastguard Worker }
257*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixLargeLastCharMismatches)258*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixLargeLastCharMismatches) {
259*9356374aSAndroid Build Coastguard Worker   const std::string x1(300, 'x');
260*9356374aSAndroid Build Coastguard Worker   std::string x2 = x1;
261*9356374aSAndroid Build Coastguard Worker   x2.back() = '#';
262*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), std::string(299, 'x'));
263*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), std::string(299, 'x'));
264*9356374aSAndroid Build Coastguard Worker }
265*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonPrefixLargeFullMatch)266*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonPrefixLargeFullMatch) {
267*9356374aSAndroid Build Coastguard Worker   const std::string x1(300, 'x');
268*9356374aSAndroid Build Coastguard Worker   const std::string x2 = x1;
269*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x1, x2), std::string(300, 'x'));
270*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonPrefix(x2, x1), std::string(300, 'x'));
271*9356374aSAndroid Build Coastguard Worker }
272*9356374aSAndroid Build Coastguard Worker 
TEST(MatchTest,FindLongestCommonSuffix)273*9356374aSAndroid Build Coastguard Worker TEST(MatchTest, FindLongestCommonSuffix) {
274*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("", ""), "");
275*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("", "abc"), "");
276*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("abc", ""), "");
277*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("bc", "abc"), "bc");
278*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("abc", "bc"), "bc");
279*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("abc", "dbc"), "bc");
280*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("bcd", "abcd"), "bcd");
281*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("abcd", "abcd"), "abcd");
282*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix("abcd", "efgh"), "");
283*9356374aSAndroid Build Coastguard Worker 
284*9356374aSAndroid Build Coastguard Worker   // "abcde" v. "cde" but in the middle of other data
285*9356374aSAndroid Build Coastguard Worker   EXPECT_EQ(absl::FindLongestCommonSuffix(
286*9356374aSAndroid Build Coastguard Worker                 absl::string_view("1234 abcdef").substr(5, 5),
287*9356374aSAndroid Build Coastguard Worker                 absl::string_view("5678 abcdef").substr(7, 3)),
288*9356374aSAndroid Build Coastguard Worker             "cde");
289*9356374aSAndroid Build Coastguard Worker }
290*9356374aSAndroid Build Coastguard Worker 
291*9356374aSAndroid Build Coastguard Worker }  // namespace
292