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