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