xref: /aosp_15_r20/external/cronet/base/containers/contains_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/containers/contains.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <functional>
8*6777b538SAndroid Build Coastguard Worker #include <set>
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker #include <string_view>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/containers/flat_set.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/strings/string_util.h"
14*6777b538SAndroid Build Coastguard Worker #include "testing/gmock/include/gmock/gmock.h"
15*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace base {
18*6777b538SAndroid Build Coastguard Worker 
TEST(ContainsTest,GenericContains)19*6777b538SAndroid Build Coastguard Worker TEST(ContainsTest, GenericContains) {
20*6777b538SAndroid Build Coastguard Worker   constexpr char allowed_chars[] = {'a', 'b', 'c', 'd'};
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker   static_assert(Contains(allowed_chars, 'a'), "");
23*6777b538SAndroid Build Coastguard Worker   static_assert(!Contains(allowed_chars, 'z'), "");
24*6777b538SAndroid Build Coastguard Worker   static_assert(!Contains(allowed_chars, 0), "");
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker   constexpr char allowed_chars_including_nul[] = "abcd";
27*6777b538SAndroid Build Coastguard Worker   static_assert(Contains(allowed_chars_including_nul, 0), "");
28*6777b538SAndroid Build Coastguard Worker }
29*6777b538SAndroid Build Coastguard Worker 
TEST(ContainsTest,GenericContainsWithProjection)30*6777b538SAndroid Build Coastguard Worker TEST(ContainsTest, GenericContainsWithProjection) {
31*6777b538SAndroid Build Coastguard Worker   const char allowed_chars[] = {'A', 'B', 'C', 'D'};
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(Contains(allowed_chars, 'a', &ToLowerASCII<char>));
34*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(allowed_chars, 'z', &ToLowerASCII<char>));
35*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(allowed_chars, 0, &ToLowerASCII<char>));
36*6777b538SAndroid Build Coastguard Worker }
37*6777b538SAndroid Build Coastguard Worker 
TEST(ContainsTest,GenericSetContainsWithProjection)38*6777b538SAndroid Build Coastguard Worker TEST(ContainsTest, GenericSetContainsWithProjection) {
39*6777b538SAndroid Build Coastguard Worker   constexpr std::string_view kFoo = "foo";
40*6777b538SAndroid Build Coastguard Worker   std::set<std::string> set = {"foo", "bar", "baz"};
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker   // Opt into a linear search by explicitly providing a projection:
43*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(Contains(set, kFoo, std::identity{}));
44*6777b538SAndroid Build Coastguard Worker }
45*6777b538SAndroid Build Coastguard Worker 
TEST(ContainsTest,ContainsWithFindAndNpos)46*6777b538SAndroid Build Coastguard Worker TEST(ContainsTest, ContainsWithFindAndNpos) {
47*6777b538SAndroid Build Coastguard Worker   std::string str = "abcd";
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(Contains(str, 'a'));
50*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(str, 'z'));
51*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(str, 0));
52*6777b538SAndroid Build Coastguard Worker }
53*6777b538SAndroid Build Coastguard Worker 
TEST(ContainsTest,ContainsWithFindAndEnd)54*6777b538SAndroid Build Coastguard Worker TEST(ContainsTest, ContainsWithFindAndEnd) {
55*6777b538SAndroid Build Coastguard Worker   std::set<int> set = {1, 2, 3, 4};
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(Contains(set, 1));
58*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(set, 5));
59*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(set, 0));
60*6777b538SAndroid Build Coastguard Worker }
61*6777b538SAndroid Build Coastguard Worker 
TEST(ContainsTest,ContainsWithContains)62*6777b538SAndroid Build Coastguard Worker TEST(ContainsTest, ContainsWithContains) {
63*6777b538SAndroid Build Coastguard Worker   flat_set<int> set = {1, 2, 3, 4};
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(Contains(set, 1));
66*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(set, 5));
67*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(Contains(set, 0));
68*6777b538SAndroid Build Coastguard Worker }
69*6777b538SAndroid Build Coastguard Worker 
70*6777b538SAndroid Build Coastguard Worker }  // namespace base
71