1*e0b6c992SLang Hames //===-- extensible_rtti_test.cpp ------------------------------------------===//
2*e0b6c992SLang Hames //
3*e0b6c992SLang Hames // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e0b6c992SLang Hames // See https://llvm.org/LICENSE.txt for license information.
5*e0b6c992SLang Hames // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e0b6c992SLang Hames //
7*e0b6c992SLang Hames //===----------------------------------------------------------------------===//
8*e0b6c992SLang Hames //
9*e0b6c992SLang Hames // This file is a part of the ORC runtime.
10*e0b6c992SLang Hames //
11*e0b6c992SLang Hames // Note:
12*e0b6c992SLang Hames //   This unit test was adapted from
13*e0b6c992SLang Hames //   llvm/unittests/Support/ExtensibleRTTITest.cpp
14*e0b6c992SLang Hames //
15*e0b6c992SLang Hames //===----------------------------------------------------------------------===//
16*e0b6c992SLang Hames 
17*e0b6c992SLang Hames #include "extensible_rtti.h"
18*e0b6c992SLang Hames #include "gtest/gtest.h"
19*e0b6c992SLang Hames 
20*e0b6c992SLang Hames using namespace __orc_rt;
21*e0b6c992SLang Hames 
22*e0b6c992SLang Hames namespace {
23*e0b6c992SLang Hames 
24*e0b6c992SLang Hames class MyBase : public RTTIExtends<MyBase, RTTIRoot> {};
25*e0b6c992SLang Hames 
26*e0b6c992SLang Hames class MyDerivedA : public RTTIExtends<MyDerivedA, MyBase> {};
27*e0b6c992SLang Hames 
28*e0b6c992SLang Hames class MyDerivedB : public RTTIExtends<MyDerivedB, MyBase> {};
29*e0b6c992SLang Hames 
30*e0b6c992SLang Hames } // end anonymous namespace
31*e0b6c992SLang Hames 
TEST(ExtensibleRTTITest,BaseCheck)32*e0b6c992SLang Hames TEST(ExtensibleRTTITest, BaseCheck) {
33*e0b6c992SLang Hames   MyBase MB;
34*e0b6c992SLang Hames   MyDerivedA MDA;
35*e0b6c992SLang Hames   MyDerivedB MDB;
36*e0b6c992SLang Hames 
37*e0b6c992SLang Hames   // Check MB properties.
38*e0b6c992SLang Hames   EXPECT_TRUE(isa<RTTIRoot>(MB));
39*e0b6c992SLang Hames   EXPECT_TRUE(isa<MyBase>(MB));
40*e0b6c992SLang Hames   EXPECT_FALSE(isa<MyDerivedA>(MB));
41*e0b6c992SLang Hames   EXPECT_FALSE(isa<MyDerivedB>(MB));
42*e0b6c992SLang Hames 
43*e0b6c992SLang Hames   // Check MDA properties.
44*e0b6c992SLang Hames   EXPECT_TRUE(isa<RTTIRoot>(MDA));
45*e0b6c992SLang Hames   EXPECT_TRUE(isa<MyBase>(MDA));
46*e0b6c992SLang Hames   EXPECT_TRUE(isa<MyDerivedA>(MDA));
47*e0b6c992SLang Hames   EXPECT_FALSE(isa<MyDerivedB>(MDA));
48*e0b6c992SLang Hames 
49*e0b6c992SLang Hames   // Check MDB properties.
50*e0b6c992SLang Hames   EXPECT_TRUE(isa<RTTIRoot>(MDB));
51*e0b6c992SLang Hames   EXPECT_TRUE(isa<MyBase>(MDB));
52*e0b6c992SLang Hames   EXPECT_FALSE(isa<MyDerivedA>(MDB));
53*e0b6c992SLang Hames   EXPECT_TRUE(isa<MyDerivedB>(MDB));
54*e0b6c992SLang Hames }
55