// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/containers/contains.h"

#include <set>
#include <string>

#include "base/containers/flat_set.h"
#include "base/functional/identity.h"
#include "base/strings/string_piece.h"
#include "base/strings/string_util.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {

TEST(ContainsTest, GenericContains) {
  constexpr char allowed_chars[] = {'a', 'b', 'c', 'd'};

  static_assert(Contains(allowed_chars, 'a'), "");
  static_assert(!Contains(allowed_chars, 'z'), "");
  static_assert(!Contains(allowed_chars, 0), "");

  constexpr char allowed_chars_including_nul[] = "abcd";
  static_assert(Contains(allowed_chars_including_nul, 0), "");
}

TEST(ContainsTest, GenericContainsWithProjection) {
  const char allowed_chars[] = {'A', 'B', 'C', 'D'};

  EXPECT_TRUE(Contains(allowed_chars, 'a', &ToLowerASCII<char>));
  EXPECT_FALSE(Contains(allowed_chars, 'z', &ToLowerASCII<char>));
  EXPECT_FALSE(Contains(allowed_chars, 0, &ToLowerASCII<char>));
}

TEST(ContainsTest, GenericSetContainsWithProjection) {
  constexpr StringPiece kFoo = "foo";
  std::set<std::string> set = {"foo", "bar", "baz"};

  // Opt into a linear search by explicitly providing a projection:
  EXPECT_TRUE(Contains(set, kFoo, identity{}));
}

TEST(ContainsTest, ContainsWithFindAndNpos) {
  std::string str = "abcd";

  EXPECT_TRUE(Contains(str, 'a'));
  EXPECT_FALSE(Contains(str, 'z'));
  EXPECT_FALSE(Contains(str, 0));
}

TEST(ContainsTest, ContainsWithFindAndEnd) {
  std::set<int> set = {1, 2, 3, 4};

  EXPECT_TRUE(Contains(set, 1));
  EXPECT_FALSE(Contains(set, 5));
  EXPECT_FALSE(Contains(set, 0));
}

TEST(ContainsTest, ContainsWithContains) {
  flat_set<int> set = {1, 2, 3, 4};

  EXPECT_TRUE(Contains(set, 1));
  EXPECT_FALSE(Contains(set, 5));
  EXPECT_FALSE(Contains(set, 0));
}

}  // namespace base
