blob: 4dfcb7ea75da32446aee9ebaf5cab803d22193e8 [file] [log] [blame]
David Blaikiee2760b72013-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
Chandler Carruth1284df12014-04-28 23:37:53 +000016typedef PointerUnion<int *, float *> PU;
David Blaikiee2760b72013-08-21 21:30:23 +000017
18// Test fixture
Chandler Carruth1284df12014-04-28 23:37:53 +000019class PointerUnionTest : public testing::Test {};
David Blaikiee2760b72013-08-21 21:30:23 +000020
21float f = 3.14f;
22int i = 42;
23
24const PU a(&f);
25const PU b(&i);
26const PU n;
27
28TEST_F(PointerUnionTest, Comparison) {
29 EXPECT_TRUE(a != b);
30 EXPECT_FALSE(a == b);
31 EXPECT_TRUE(b != n);
32 EXPECT_FALSE(b == n);
33}
34
35TEST_F(PointerUnionTest, Null) {
36 EXPECT_FALSE(a.isNull());
37 EXPECT_FALSE(b.isNull());
38 EXPECT_TRUE(n.isNull());
39 EXPECT_FALSE(!a);
40 EXPECT_FALSE(!b);
41 EXPECT_TRUE(!n);
42 // workaround an issue with EXPECT macros and explicit bool
43 EXPECT_TRUE((bool)a);
44 EXPECT_TRUE((bool)b);
45 EXPECT_FALSE(n);
46}
47
48TEST_F(PointerUnionTest, Is) {
Chandler Carruth1284df12014-04-28 23:37:53 +000049 EXPECT_FALSE(a.is<int *>());
50 EXPECT_TRUE(a.is<float *>());
51 EXPECT_TRUE(b.is<int *>());
52 EXPECT_FALSE(b.is<float *>());
53 EXPECT_TRUE(n.is<int *>());
54 EXPECT_FALSE(n.is<float *>());
David Blaikiee2760b72013-08-21 21:30:23 +000055}
56
57TEST_F(PointerUnionTest, Get) {
Chandler Carruth1284df12014-04-28 23:37:53 +000058 EXPECT_EQ(a.get<float *>(), &f);
59 EXPECT_EQ(b.get<int *>(), &i);
60 EXPECT_EQ(n.get<int *>(), (int *)0);
David Blaikiee2760b72013-08-21 21:30:23 +000061}
62
63} // end anonymous namespace