PointerUnionTest.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //===- 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. #include "gtest/gtest.h"
  10. #include "llvm/ADT/PointerUnion.h"
  11. using namespace llvm;
  12. namespace {
  13. typedef PointerUnion<int *, float *> PU;
  14. struct PointerUnionTest : public testing::Test {
  15. float f;
  16. int i;
  17. PU a, b, c, n;
  18. PointerUnionTest() : f(3.14f), i(42), a(&f), b(&i), c(&i), n() {}
  19. };
  20. TEST_F(PointerUnionTest, Comparison) {
  21. EXPECT_TRUE(a == a);
  22. EXPECT_FALSE(a != a);
  23. EXPECT_TRUE(a != b);
  24. EXPECT_FALSE(a == b);
  25. EXPECT_TRUE(b == c);
  26. EXPECT_FALSE(b != c);
  27. EXPECT_TRUE(b != n);
  28. EXPECT_FALSE(b == n);
  29. }
  30. TEST_F(PointerUnionTest, Null) {
  31. EXPECT_FALSE(a.isNull());
  32. EXPECT_FALSE(b.isNull());
  33. EXPECT_TRUE(n.isNull());
  34. EXPECT_FALSE(!a);
  35. EXPECT_FALSE(!b);
  36. EXPECT_TRUE(!n);
  37. // workaround an issue with EXPECT macros and explicit bool
  38. EXPECT_TRUE((bool)a);
  39. EXPECT_TRUE((bool)b);
  40. EXPECT_FALSE(n);
  41. EXPECT_NE(n, b);
  42. EXPECT_EQ(b, c);
  43. b = nullptr;
  44. EXPECT_EQ(n, b);
  45. EXPECT_NE(b, c);
  46. }
  47. TEST_F(PointerUnionTest, Is) {
  48. EXPECT_FALSE(a.is<int *>());
  49. EXPECT_TRUE(a.is<float *>());
  50. EXPECT_TRUE(b.is<int *>());
  51. EXPECT_FALSE(b.is<float *>());
  52. EXPECT_TRUE(n.is<int *>());
  53. EXPECT_FALSE(n.is<float *>());
  54. }
  55. TEST_F(PointerUnionTest, Get) {
  56. EXPECT_EQ(a.get<float *>(), &f);
  57. EXPECT_EQ(b.get<int *>(), &i);
  58. EXPECT_EQ(n.get<int *>(), (int *)nullptr);
  59. }
  60. } // end anonymous namespace