Mercurial > hg > CbC > CbC_llvm
comparison mlir/unittests/TableGen/EnumsGenTest.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 2e18cbf3894f |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 //===- EnumsGenTest.cpp - TableGen EnumsGen Tests -------------------------===// | |
2 // | |
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
4 // See https://llvm.org/LICENSE.txt for license information. | |
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
6 // | |
7 //===----------------------------------------------------------------------===// | |
8 | |
9 #include "llvm/ADT/DenseMap.h" | |
10 #include "llvm/ADT/Optional.h" | |
11 #include "llvm/ADT/SmallVector.h" | |
12 #include "llvm/ADT/StringExtras.h" | |
13 #include "llvm/ADT/StringSwitch.h" | |
14 #include "gmock/gmock.h" | |
15 #include <type_traits> | |
16 | |
17 // Pull in generated enum utility declarations | |
18 #include "EnumsGenTest.h.inc" | |
19 // And definitions | |
20 #include "EnumsGenTest.cpp.inc" | |
21 | |
22 // Test namespaces and enum class/utility names | |
23 using Outer::Inner::ConvertToEnum; | |
24 using Outer::Inner::ConvertToString; | |
25 using Outer::Inner::StrEnum; | |
26 | |
27 TEST(EnumsGenTest, GeneratedStrEnumDefinition) { | |
28 EXPECT_EQ(0u, static_cast<uint64_t>(StrEnum::CaseA)); | |
29 EXPECT_EQ(10u, static_cast<uint64_t>(StrEnum::CaseB)); | |
30 } | |
31 | |
32 TEST(EnumsGenTest, GeneratedI32EnumDefinition) { | |
33 EXPECT_EQ(5u, static_cast<uint64_t>(I32Enum::Case5)); | |
34 EXPECT_EQ(10u, static_cast<uint64_t>(I32Enum::Case10)); | |
35 } | |
36 | |
37 TEST(EnumsGenTest, GeneratedDenseMapInfo) { | |
38 llvm::DenseMap<StrEnum, std::string> myMap; | |
39 | |
40 myMap[StrEnum::CaseA] = "zero"; | |
41 myMap[StrEnum::CaseB] = "one"; | |
42 | |
43 EXPECT_EQ(myMap[StrEnum::CaseA], "zero"); | |
44 EXPECT_EQ(myMap[StrEnum::CaseB], "one"); | |
45 } | |
46 | |
47 TEST(EnumsGenTest, GeneratedSymbolToStringFn) { | |
48 EXPECT_EQ(ConvertToString(StrEnum::CaseA), "CaseA"); | |
49 EXPECT_EQ(ConvertToString(StrEnum::CaseB), "CaseB"); | |
50 } | |
51 | |
52 TEST(EnumsGenTest, GeneratedStringToSymbolFn) { | |
53 EXPECT_EQ(llvm::Optional<StrEnum>(StrEnum::CaseA), ConvertToEnum("CaseA")); | |
54 EXPECT_EQ(llvm::Optional<StrEnum>(StrEnum::CaseB), ConvertToEnum("CaseB")); | |
55 EXPECT_EQ(llvm::None, ConvertToEnum("X")); | |
56 } | |
57 | |
58 TEST(EnumsGenTest, GeneratedUnderlyingType) { | |
59 bool v = std::is_same<uint32_t, std::underlying_type<I32Enum>::type>::value; | |
60 EXPECT_TRUE(v); | |
61 } | |
62 | |
63 TEST(EnumsGenTest, GeneratedBitEnumDefinition) { | |
64 EXPECT_EQ(0u, static_cast<uint32_t>(BitEnumWithNone::None)); | |
65 EXPECT_EQ(1u, static_cast<uint32_t>(BitEnumWithNone::Bit1)); | |
66 EXPECT_EQ(4u, static_cast<uint32_t>(BitEnumWithNone::Bit3)); | |
67 } | |
68 | |
69 TEST(EnumsGenTest, GeneratedSymbolToStringFnForBitEnum) { | |
70 EXPECT_EQ(stringifyBitEnumWithNone(BitEnumWithNone::None), "None"); | |
71 EXPECT_EQ(stringifyBitEnumWithNone(BitEnumWithNone::Bit1), "Bit1"); | |
72 EXPECT_EQ(stringifyBitEnumWithNone(BitEnumWithNone::Bit3), "Bit3"); | |
73 EXPECT_EQ( | |
74 stringifyBitEnumWithNone(BitEnumWithNone::Bit1 | BitEnumWithNone::Bit3), | |
75 "Bit1|Bit3"); | |
76 } | |
77 | |
78 TEST(EnumsGenTest, GeneratedStringToSymbolForBitEnum) { | |
79 EXPECT_EQ(symbolizeBitEnumWithNone("None"), BitEnumWithNone::None); | |
80 EXPECT_EQ(symbolizeBitEnumWithNone("Bit1"), BitEnumWithNone::Bit1); | |
81 EXPECT_EQ(symbolizeBitEnumWithNone("Bit3"), BitEnumWithNone::Bit3); | |
82 EXPECT_EQ(symbolizeBitEnumWithNone("Bit3|Bit1"), | |
83 BitEnumWithNone::Bit3 | BitEnumWithNone::Bit1); | |
84 | |
85 EXPECT_EQ(symbolizeBitEnumWithNone("Bit2"), llvm::None); | |
86 EXPECT_EQ(symbolizeBitEnumWithNone("Bit3|Bit4"), llvm::None); | |
87 | |
88 EXPECT_EQ(symbolizeBitEnumWithoutNone("None"), llvm::None); | |
89 } | |
90 | |
91 TEST(EnumsGenTest, GeneratedOperator) { | |
92 EXPECT_TRUE(bitEnumContains(BitEnumWithNone::Bit1 | BitEnumWithNone::Bit3, | |
93 BitEnumWithNone::Bit1)); | |
94 EXPECT_FALSE(bitEnumContains(BitEnumWithNone::Bit1 & BitEnumWithNone::Bit3, | |
95 BitEnumWithNone::Bit1)); | |
96 } | |
97 | |
98 TEST(EnumsGenTest, GeneratedSymbolToCustomStringFn) { | |
99 EXPECT_EQ(stringifyPrettyIntEnum(PrettyIntEnum::Case1), "case_one"); | |
100 EXPECT_EQ(stringifyPrettyIntEnum(PrettyIntEnum::Case2), "case_two"); | |
101 } | |
102 | |
103 TEST(EnumsGenTest, GeneratedCustomStringToSymbolFn) { | |
104 auto one = symbolizePrettyIntEnum("case_one"); | |
105 EXPECT_TRUE(one); | |
106 EXPECT_EQ(*one, PrettyIntEnum::Case1); | |
107 | |
108 auto two = symbolizePrettyIntEnum("case_two"); | |
109 EXPECT_TRUE(two); | |
110 EXPECT_EQ(*two, PrettyIntEnum::Case2); | |
111 | |
112 auto none = symbolizePrettyIntEnum("Case1"); | |
113 EXPECT_FALSE(none); | |
114 } |