summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/HashingTest.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2012-03-07 09:32:32 +0000
committerChandler Carruth <chandlerc@gmail.com>2012-03-07 09:32:32 +0000
commit2bd66afa4291cffaab74ee055d29e8bae6087921 (patch)
tree889a66f6a0827dc47dc90274e4435bf8a5bffddb /llvm/unittests/ADT/HashingTest.cpp
parent1e3c1d38f2ce9eb48fea3d9922b41adf59ff0a6e (diff)
downloadbcm5719-llvm-2bd66afa4291cffaab74ee055d29e8bae6087921.tar.gz
bcm5719-llvm-2bd66afa4291cffaab74ee055d29e8bae6087921.zip
Add support to the hashing infrastructure for automatically hashing both
integral and enumeration types. This is accomplished with a bit of template type trait magic. Thanks to Richard Smith for the core idea here to detect viable types by detecting the set of types which can be default constructed in a template parameter. This is used (in conjunction with a system for detecting nullptr_t should it exist) to provide an is_integral_or_enum type trait that doesn't need a whitelist or direct compiler support. With this, the hashing is extended to the more general facility. This will be used in a subsequent commit to hashing more things, but I wanted to make sure the type trait magic went through the build bots separately in case other compilers don't like this formulation. llvm-svn: 152217
Diffstat (limited to 'llvm/unittests/ADT/HashingTest.cpp')
-rw-r--r--llvm/unittests/ADT/HashingTest.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/HashingTest.cpp b/llvm/unittests/ADT/HashingTest.cpp
index f5d6aed5b99..b148f144513 100644
--- a/llvm/unittests/ADT/HashingTest.cpp
+++ b/llvm/unittests/ADT/HashingTest.cpp
@@ -51,6 +51,10 @@ using namespace llvm;
namespace {
+enum TestEnumeration {
+ TE_Foo = 42,
+ TE_Bar = 43
+};
TEST(HashingTest, HashValueBasicTest) {
int x = 42, y = 43, c = 'x';
@@ -61,7 +65,9 @@ TEST(HashingTest, HashValueBasicTest) {
const volatile int cvi = 71;
uintptr_t addr = reinterpret_cast<uintptr_t>(&y);
EXPECT_EQ(hash_value(42), hash_value(x));
+ EXPECT_EQ(hash_value(42), hash_value(TE_Foo));
EXPECT_NE(hash_value(42), hash_value(y));
+ EXPECT_NE(hash_value(42), hash_value(TE_Bar));
EXPECT_NE(hash_value(42), hash_value(p));
EXPECT_EQ(hash_value(71), hash_value(i));
EXPECT_EQ(hash_value(71), hash_value(ci));
OpenPOWER on IntegriCloud