blob: 7eb718112d692b1df9328531bf616ea8ddb06c93 [file] [log] [blame]
David Blaikie296ca412013-08-21 21:30:23 +00001//===- llvm/unittest/ADT/PointerUnionTest.cpp - Optional unit tests -------===//
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/PointerUnion.h"
12using namespace llvm;
13
14namespace {
15
16typedef PointerUnion<int*, float*> PU;
17
18// Test fixture
19class PointerUnionTest : public testing::Test {
20};
21
22float f = 3.14f;
23int i = 42;
24
25const PU a(&f);
26const PU b(&i);
27const PU n;
28
29TEST_F(PointerUnionTest, Comparison) {
30 EXPECT_TRUE(a != b);
31 EXPECT_FALSE(a == b);
32 EXPECT_TRUE(b != n);
33 EXPECT_FALSE(b == n);
34}
35
36TEST_F(PointerUnionTest, Null) {
37 EXPECT_FALSE(a.isNull());
38 EXPECT_FALSE(b.isNull());
39 EXPECT_TRUE(n.isNull());
40 EXPECT_FALSE(!a);
41 EXPECT_FALSE(!b);
42 EXPECT_TRUE(!n);
43 // workaround an issue with EXPECT macros and explicit bool
44 EXPECT_TRUE((bool)a);
45 EXPECT_TRUE((bool)b);
46 EXPECT_FALSE(n);
47}
48
49TEST_F(PointerUnionTest, Is) {
50 EXPECT_FALSE(a.is<int*>());
51 EXPECT_TRUE(a.is<float*>());
52 EXPECT_TRUE(b.is<int*>());
53 EXPECT_FALSE(b.is<float*>());
54 EXPECT_TRUE(n.is<int*>());
55 EXPECT_FALSE(n.is<float*>());
56}
57
58TEST_F(PointerUnionTest, Get) {
59 EXPECT_EQ(a.get<float*>(), &f);
60 EXPECT_EQ(b.get<int*>(), &i);
61 EXPECT_EQ(n.get<int*>(), (int*)0);
62}
63
64} // end anonymous namespace