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