mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-17 03:24:34 +00:00
[ADT] Add a 'find_as' operation to DenseSet.
This operation is analogous to its counterpart in DenseMap: It allows lookup via cheap-to-construct keys (provided that getHashValue and isEqual are implemented for the cheap key-type in the DenseMapInfo specialization). Thanks to Chandler for the review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220168 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -27,4 +27,42 @@ TEST_F(DenseSetTest, DoubleEntrySetTest) {
|
||||
EXPECT_EQ(0u, set.count(2));
|
||||
}
|
||||
|
||||
struct TestDenseSetInfo {
|
||||
static inline unsigned getEmptyKey() { return ~0; }
|
||||
static inline unsigned getTombstoneKey() { return ~0U - 1; }
|
||||
static unsigned getHashValue(const unsigned& Val) { return Val * 37U; }
|
||||
static unsigned getHashValue(const char* Val) {
|
||||
return (unsigned)(Val[0] - 'a') * 37U;
|
||||
}
|
||||
static bool isEqual(const unsigned& LHS, const unsigned& RHS) {
|
||||
return LHS == RHS;
|
||||
}
|
||||
static bool isEqual(const char* LHS, const unsigned& RHS) {
|
||||
return (unsigned)(LHS[0] - 'a') == RHS;
|
||||
}
|
||||
};
|
||||
|
||||
TEST(DenseSetCustomTest, FindAsTest) {
|
||||
DenseSet<unsigned, TestDenseSetInfo> set;
|
||||
set.insert(0);
|
||||
set.insert(1);
|
||||
set.insert(2);
|
||||
|
||||
// Size tests
|
||||
EXPECT_EQ(3u, set.size());
|
||||
|
||||
// Normal lookup tests
|
||||
EXPECT_EQ(1u, set.count(1));
|
||||
EXPECT_EQ(0u, *set.find(0));
|
||||
EXPECT_EQ(1u, *set.find(1));
|
||||
EXPECT_EQ(2u, *set.find(2));
|
||||
EXPECT_TRUE(set.find(3) == set.end());
|
||||
|
||||
// find_as() tests
|
||||
EXPECT_EQ(0u, *set.find_as("a"));
|
||||
EXPECT_EQ(1u, *set.find_as("b"));
|
||||
EXPECT_EQ(2u, *set.find_as("c"));
|
||||
EXPECT_TRUE(set.find_as("d") == set.end());
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user