1*9880d681SAndroid Build Coastguard Worker //===- llvm/unittest/ADT/DenseSetTest.cpp - DenseSet unit tests --*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
11*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/DenseSet.h"
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker using namespace llvm;
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker namespace {
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker // Test fixture
18*9880d681SAndroid Build Coastguard Worker class DenseSetTest : public testing::Test {
19*9880d681SAndroid Build Coastguard Worker };
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker // Test hashing with a set of only two entries.
TEST_F(DenseSetTest,DoubleEntrySetTest)22*9880d681SAndroid Build Coastguard Worker TEST_F(DenseSetTest, DoubleEntrySetTest) {
23*9880d681SAndroid Build Coastguard Worker llvm::DenseSet<unsigned> set(2);
24*9880d681SAndroid Build Coastguard Worker set.insert(0);
25*9880d681SAndroid Build Coastguard Worker set.insert(1);
26*9880d681SAndroid Build Coastguard Worker // Original failure was an infinite loop in this call:
27*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0u, set.count(2));
28*9880d681SAndroid Build Coastguard Worker }
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker struct TestDenseSetInfo {
getEmptyKey__anon9447bd870111::TestDenseSetInfo31*9880d681SAndroid Build Coastguard Worker static inline unsigned getEmptyKey() { return ~0; }
getTombstoneKey__anon9447bd870111::TestDenseSetInfo32*9880d681SAndroid Build Coastguard Worker static inline unsigned getTombstoneKey() { return ~0U - 1; }
getHashValue__anon9447bd870111::TestDenseSetInfo33*9880d681SAndroid Build Coastguard Worker static unsigned getHashValue(const unsigned& Val) { return Val * 37U; }
getHashValue__anon9447bd870111::TestDenseSetInfo34*9880d681SAndroid Build Coastguard Worker static unsigned getHashValue(const char* Val) {
35*9880d681SAndroid Build Coastguard Worker return (unsigned)(Val[0] - 'a') * 37U;
36*9880d681SAndroid Build Coastguard Worker }
isEqual__anon9447bd870111::TestDenseSetInfo37*9880d681SAndroid Build Coastguard Worker static bool isEqual(const unsigned& LHS, const unsigned& RHS) {
38*9880d681SAndroid Build Coastguard Worker return LHS == RHS;
39*9880d681SAndroid Build Coastguard Worker }
isEqual__anon9447bd870111::TestDenseSetInfo40*9880d681SAndroid Build Coastguard Worker static bool isEqual(const char* LHS, const unsigned& RHS) {
41*9880d681SAndroid Build Coastguard Worker return (unsigned)(LHS[0] - 'a') == RHS;
42*9880d681SAndroid Build Coastguard Worker }
43*9880d681SAndroid Build Coastguard Worker };
44*9880d681SAndroid Build Coastguard Worker
TEST(DenseSetCustomTest,FindAsTest)45*9880d681SAndroid Build Coastguard Worker TEST(DenseSetCustomTest, FindAsTest) {
46*9880d681SAndroid Build Coastguard Worker DenseSet<unsigned, TestDenseSetInfo> set;
47*9880d681SAndroid Build Coastguard Worker set.insert(0);
48*9880d681SAndroid Build Coastguard Worker set.insert(1);
49*9880d681SAndroid Build Coastguard Worker set.insert(2);
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker // Size tests
52*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(3u, set.size());
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker // Normal lookup tests
55*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1u, set.count(1));
56*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0u, *set.find(0));
57*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1u, *set.find(1));
58*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2u, *set.find(2));
59*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(set.find(3) == set.end());
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker // find_as() tests
62*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(0u, *set.find_as("a"));
63*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(1u, *set.find_as("b"));
64*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(2u, *set.find_as("c"));
65*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(set.find_as("d") == set.end());
66*9880d681SAndroid Build Coastguard Worker }
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker }
69