1296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie//===- llvm/unittest/ADT/PointerUnionTest.cpp - Optional unit tests -------===// 2296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie// 3296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie// The LLVM Compiler Infrastructure 4296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie// 5296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie// This file is distributed under the University of Illinois Open Source 6296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie// License. See LICENSE.TXT for details. 7296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie// 8296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie//===----------------------------------------------------------------------===// 9296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 10296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie#include "gtest/gtest.h" 11296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie#include "llvm/ADT/PointerUnion.h" 12296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikieusing namespace llvm; 13296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 14296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikienamespace { 15296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 16dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinestypedef PointerUnion<int *, float *> PU; 17296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesstruct PointerUnionTest : public testing::Test { 19dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines float f; 20dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines int i; 21296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 22dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PU a, b, c, n; 23296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 24dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines PointerUnionTest() : f(3.14f), i(42), a(&f), b(&i), c(&i), n() {} 25dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines}; 26296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 27296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David BlaikieTEST_F(PointerUnionTest, Comparison) { 28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_TRUE(a == a); 29dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_FALSE(a != a); 30296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_TRUE(a != b); 31296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(a == b); 32dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_TRUE(b == c); 33dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_FALSE(b != c); 34296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_TRUE(b != n); 35296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(b == n); 36296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie} 37296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 38296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David BlaikieTEST_F(PointerUnionTest, Null) { 39296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(a.isNull()); 40296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(b.isNull()); 41296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_TRUE(n.isNull()); 42296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(!a); 43296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(!b); 44296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_TRUE(!n); 45296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie // workaround an issue with EXPECT macros and explicit bool 46296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_TRUE((bool)a); 47296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_TRUE((bool)b); 48296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie EXPECT_FALSE(n); 49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_NE(n, b); 51dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_EQ(b, c); 52dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines b = nullptr; 53dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_EQ(n, b); 54dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_NE(b, c); 55296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie} 56296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 57296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David BlaikieTEST_F(PointerUnionTest, Is) { 58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_FALSE(a.is<int *>()); 59dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_TRUE(a.is<float *>()); 60dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_TRUE(b.is<int *>()); 61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_FALSE(b.is<float *>()); 62dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_TRUE(n.is<int *>()); 63dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_FALSE(n.is<float *>()); 64296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie} 65296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 66296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David BlaikieTEST_F(PointerUnionTest, Get) { 67dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_EQ(a.get<float *>(), &f); 68dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines EXPECT_EQ(b.get<int *>(), &i); 69cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ(n.get<int *>(), (int *)nullptr); 70296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie} 71296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie 72296ca41b2d305f4aaf1d0562c7da90dc20cd9e14David Blaikie} // end anonymous namespace 73