1*9880d681SAndroid Build Coastguard Worker //===- llvm/unittest/ADT/PointerUnionTest.cpp - Optional unit tests -------===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h"
11*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/PointerUnion.h"
12*9880d681SAndroid Build Coastguard Worker using namespace llvm;
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker namespace {
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker typedef PointerUnion<int *, float *> PU;
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker struct PointerUnionTest : public testing::Test {
19*9880d681SAndroid Build Coastguard Worker float f;
20*9880d681SAndroid Build Coastguard Worker int i;
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker PU a, b, c, n;
23*9880d681SAndroid Build Coastguard Worker
PointerUnionTest__anon492d38560111::PointerUnionTest24*9880d681SAndroid Build Coastguard Worker PointerUnionTest() : f(3.14f), i(42), a(&f), b(&i), c(&i), n() {}
25*9880d681SAndroid Build Coastguard Worker };
26*9880d681SAndroid Build Coastguard Worker
TEST_F(PointerUnionTest,Comparison)27*9880d681SAndroid Build Coastguard Worker TEST_F(PointerUnionTest, Comparison) {
28*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(a == a);
29*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(a != a);
30*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(a != b);
31*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(a == b);
32*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(b == c);
33*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(b != c);
34*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(b != n);
35*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(b == n);
36*9880d681SAndroid Build Coastguard Worker }
37*9880d681SAndroid Build Coastguard Worker
TEST_F(PointerUnionTest,Null)38*9880d681SAndroid Build Coastguard Worker TEST_F(PointerUnionTest, Null) {
39*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(a.isNull());
40*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(b.isNull());
41*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(n.isNull());
42*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(!a);
43*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(!b);
44*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(!n);
45*9880d681SAndroid Build Coastguard Worker // workaround an issue with EXPECT macros and explicit bool
46*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE((bool)a);
47*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE((bool)b);
48*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(n);
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker EXPECT_NE(n, b);
51*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(b, c);
52*9880d681SAndroid Build Coastguard Worker b = nullptr;
53*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(n, b);
54*9880d681SAndroid Build Coastguard Worker EXPECT_NE(b, c);
55*9880d681SAndroid Build Coastguard Worker }
56*9880d681SAndroid Build Coastguard Worker
TEST_F(PointerUnionTest,Is)57*9880d681SAndroid Build Coastguard Worker TEST_F(PointerUnionTest, Is) {
58*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(a.is<int *>());
59*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(a.is<float *>());
60*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(b.is<int *>());
61*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(b.is<float *>());
62*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(n.is<int *>());
63*9880d681SAndroid Build Coastguard Worker EXPECT_FALSE(n.is<float *>());
64*9880d681SAndroid Build Coastguard Worker }
65*9880d681SAndroid Build Coastguard Worker
TEST_F(PointerUnionTest,Get)66*9880d681SAndroid Build Coastguard Worker TEST_F(PointerUnionTest, Get) {
67*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(a.get<float *>(), &f);
68*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(b.get<int *>(), &i);
69*9880d681SAndroid Build Coastguard Worker EXPECT_EQ(n.get<int *>(), (int *)nullptr);
70*9880d681SAndroid Build Coastguard Worker }
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker } // end anonymous namespace
73