Support: Add dwarf::getVirtuality()
[oota-llvm.git] / unittests / Support / DwarfTest.cpp
1 //===- unittest/Support/DwarfTest.cpp - Dwarf support 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 "llvm/Support/Dwarf.h"
11 #include "gtest/gtest.h"
12
13 using namespace llvm;
14 using namespace llvm::dwarf;
15
16 namespace {
17
18 TEST(DwarfTest, TagStringOnInvalid) {
19   // This is invalid, so it shouldn't be stringified.
20   EXPECT_EQ(nullptr, TagString(DW_TAG_invalid));
21
22   // These aren't really tags: they describe ranges within tags.  They
23   // shouldn't be stringified either.
24   EXPECT_EQ(nullptr, TagString(DW_TAG_lo_user));
25   EXPECT_EQ(nullptr, TagString(DW_TAG_hi_user));
26   EXPECT_EQ(nullptr, TagString(DW_TAG_user_base));
27 }
28
29 TEST(DwarfTest, getTag) {
30   // A couple of valid tags.
31   EXPECT_EQ(DW_TAG_array_type, getTag("DW_TAG_array_type"));
32   EXPECT_EQ(DW_TAG_module, getTag("DW_TAG_module"));
33
34   // Invalid tags.
35   EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_invalid"));
36   EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_madeuptag"));
37   EXPECT_EQ(DW_TAG_invalid, getTag("something else"));
38
39   // Tag range markers should not be recognized.
40   EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_lo_user"));
41   EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_hi_user"));
42   EXPECT_EQ(DW_TAG_invalid, getTag("DW_TAG_user_base"));
43 }
44
45 TEST(DwarfTest, LanguageStringOnInvalid) {
46   // This is invalid, so it shouldn't be stringified.
47   EXPECT_EQ(nullptr, LanguageString(0));
48
49   // These aren't really tags: they describe ranges within tags.  They
50   // shouldn't be stringified either.
51   EXPECT_EQ(nullptr, LanguageString(DW_LANG_lo_user));
52   EXPECT_EQ(nullptr, LanguageString(DW_LANG_hi_user));
53 }
54
55 TEST(DwarfTest, getLanguage) {
56   // A couple of valid languages.
57   EXPECT_EQ(DW_LANG_C89, getLanguage("DW_LANG_C89"));
58   EXPECT_EQ(DW_LANG_C_plus_plus_11, getLanguage("DW_LANG_C_plus_plus_11"));
59   EXPECT_EQ(DW_LANG_OCaml, getLanguage("DW_LANG_OCaml"));
60   EXPECT_EQ(DW_LANG_Mips_Assembler, getLanguage("DW_LANG_Mips_Assembler"));
61
62   // Invalid languages.
63   EXPECT_EQ(0u, getLanguage("DW_LANG_invalid"));
64   EXPECT_EQ(0u, getLanguage("DW_TAG_array_type"));
65   EXPECT_EQ(0u, getLanguage("something else"));
66
67   // Language range markers should not be recognized.
68   EXPECT_EQ(0u, getLanguage("DW_LANG_lo_user"));
69   EXPECT_EQ(0u, getLanguage("DW_LANG_hi_user"));
70 }
71
72 TEST(DwarfTest, AttributeEncodingStringOnInvalid) {
73   // This is invalid, so it shouldn't be stringified.
74   EXPECT_EQ(nullptr, AttributeEncodingString(0));
75
76   // These aren't really tags: they describe ranges within tags.  They
77   // shouldn't be stringified either.
78   EXPECT_EQ(nullptr, AttributeEncodingString(DW_ATE_lo_user));
79   EXPECT_EQ(nullptr, AttributeEncodingString(DW_ATE_hi_user));
80 }
81
82 TEST(DwarfTest, getAttributeEncoding) {
83   // A couple of valid languages.
84   EXPECT_EQ(DW_ATE_boolean, getAttributeEncoding("DW_ATE_boolean"));
85   EXPECT_EQ(DW_ATE_imaginary_float,
86             getAttributeEncoding("DW_ATE_imaginary_float"));
87
88   // Invalid languages.
89   EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_invalid"));
90   EXPECT_EQ(0u, getAttributeEncoding("DW_TAG_array_type"));
91   EXPECT_EQ(0u, getAttributeEncoding("something else"));
92
93   // AttributeEncoding range markers should not be recognized.
94   EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_lo_user"));
95   EXPECT_EQ(0u, getAttributeEncoding("DW_ATE_hi_user"));
96 }
97
98 TEST(DwarfTest, VirtualityString) {
99   EXPECT_EQ("DW_VIRTUALITY_none", VirtualityString(DW_VIRTUALITY_none));
100   EXPECT_EQ("DW_VIRTUALITY_virtual", VirtualityString(DW_VIRTUALITY_virtual));
101   EXPECT_EQ("DW_VIRTUALITY_pure_virtual",
102             VirtualityString(DW_VIRTUALITY_pure_virtual));
103
104   // DW_VIRTUALITY_max should be pure virtual.
105   EXPECT_EQ("DW_VIRTUALITY_pure_virtual", VirtualityString(DW_VIRTUALITY_max));
106
107   // Invalid numbers shouldn't be stringified.
108   EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 1));
109   EXPECT_EQ(nullptr, VirtualityString(DW_VIRTUALITY_max + 77));
110 }
111
112 TEST(DwarfTest, getVirtuality) {
113   EXPECT_EQ(DW_VIRTUALITY_none, getVirtuality("DW_VIRTUALITY_none"));
114   EXPECT_EQ(DW_VIRTUALITY_virtual, getVirtuality("DW_VIRTUALITY_virtual"));
115   EXPECT_EQ(DW_VIRTUALITY_pure_virtual,
116             getVirtuality("DW_VIRTUALITY_pure_virtual"));
117
118   // Invalid strings.
119   EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("DW_VIRTUALITY_invalid"));
120   EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("DW_VIRTUALITY_max"));
121   EXPECT_EQ(DW_VIRTUALITY_invalid, getVirtuality("something else"));
122 }
123
124 } // end namespace