diff options
| author | David Blaikie <dblaikie@gmail.com> | 2013-08-21 21:30:23 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2013-08-21 21:30:23 +0000 |
| commit | e2760b75e9dc7217777b512704ed47a9a6d0f88d (patch) | |
| tree | 31cc6f34e56d83655abad2b0ea44a2dcd1af144c | |
| parent | 570d3020e3f2352238003f7459dc9650dd63ab8e (diff) | |
| download | bcm5719-llvm-e2760b75e9dc7217777b512704ed47a9a6d0f88d.tar.gz bcm5719-llvm-e2760b75e9dc7217777b512704ed47a9a6d0f88d.zip | |
Basic unit tests for PointerUnion
llvm-svn: 188933
| -rw-r--r-- | llvm/include/llvm/ADT/PointerUnion.h | 2 | ||||
| -rw-r--r-- | llvm/unittests/ADT/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | llvm/unittests/ADT/PointerUnionTest.cpp | 64 |
3 files changed, 66 insertions, 1 deletions
diff --git a/llvm/include/llvm/ADT/PointerUnion.h b/llvm/include/llvm/ADT/PointerUnion.h index 4eed121ed39..05d362feab2 100644 --- a/llvm/include/llvm/ADT/PointerUnion.h +++ b/llvm/include/llvm/ADT/PointerUnion.h @@ -72,7 +72,7 @@ namespace llvm { /// printf("%d %d", P.is<int*>(), P.is<float*>()); // prints "1 0" /// X = P.get<int*>(); // ok. /// Y = P.get<float*>(); // runtime assertion failure. - /// Z = P.get<double*>(); // runtime assertion failure (regardless of tag) + /// Z = P.get<double*>(); // compile time failure. /// P = (float*)0; /// Y = P.get<float*>(); // ok. /// X = P.get<int*>(); // runtime assertion failure. diff --git a/llvm/unittests/ADT/CMakeLists.txt b/llvm/unittests/ADT/CMakeLists.txt index 9aad793d8bc..2125657433f 100644 --- a/llvm/unittests/ADT/CMakeLists.txt +++ b/llvm/unittests/ADT/CMakeLists.txt @@ -21,6 +21,7 @@ set(ADTSources MapVectorTest.cpp OptionalTest.cpp PackedVectorTest.cpp + PointerUnionTest.cpp SCCIteratorTest.cpp SmallPtrSetTest.cpp SmallStringTest.cpp diff --git a/llvm/unittests/ADT/PointerUnionTest.cpp b/llvm/unittests/ADT/PointerUnionTest.cpp new file mode 100644 index 00000000000..7eb718112d6 --- /dev/null +++ b/llvm/unittests/ADT/PointerUnionTest.cpp @@ -0,0 +1,64 @@ +//===- llvm/unittest/ADT/PointerUnionTest.cpp - Optional unit tests -------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" +#include "llvm/ADT/PointerUnion.h" +using namespace llvm; + +namespace { + +typedef PointerUnion<int*, float*> PU; + +// Test fixture +class PointerUnionTest : public testing::Test { +}; + +float f = 3.14f; +int i = 42; + +const PU a(&f); +const PU b(&i); +const PU n; + +TEST_F(PointerUnionTest, Comparison) { + EXPECT_TRUE(a != b); + EXPECT_FALSE(a == b); + EXPECT_TRUE(b != n); + EXPECT_FALSE(b == n); +} + +TEST_F(PointerUnionTest, Null) { + EXPECT_FALSE(a.isNull()); + EXPECT_FALSE(b.isNull()); + EXPECT_TRUE(n.isNull()); + EXPECT_FALSE(!a); + EXPECT_FALSE(!b); + EXPECT_TRUE(!n); + // workaround an issue with EXPECT macros and explicit bool + EXPECT_TRUE((bool)a); + EXPECT_TRUE((bool)b); + EXPECT_FALSE(n); +} + +TEST_F(PointerUnionTest, Is) { + EXPECT_FALSE(a.is<int*>()); + EXPECT_TRUE(a.is<float*>()); + EXPECT_TRUE(b.is<int*>()); + EXPECT_FALSE(b.is<float*>()); + EXPECT_TRUE(n.is<int*>()); + EXPECT_FALSE(n.is<float*>()); +} + +TEST_F(PointerUnionTest, Get) { + EXPECT_EQ(a.get<float*>(), &f); + EXPECT_EQ(b.get<int*>(), &i); + EXPECT_EQ(n.get<int*>(), (int*)0); +} + +} // end anonymous namespace |

