annotate mlir/unittests/TableGen/StructsGenTest.cpp @ 221:79ff65ed7e25

LLVM12 Original
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 15 Jun 2021 19:15:29 +0900
parents 0572611fdcc8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===- StructsGenTest.cpp - TableGen StructsGen Tests ---------------------===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 #include "mlir/IR/Attributes.h"
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
10 #include "mlir/IR/Builders.h"
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
11 #include "mlir/IR/BuiltinTypes.h"
150
anatofuz
parents:
diff changeset
12 #include "mlir/IR/Identifier.h"
anatofuz
parents:
diff changeset
13 #include "llvm/ADT/DenseMap.h"
anatofuz
parents:
diff changeset
14 #include "llvm/ADT/Optional.h"
anatofuz
parents:
diff changeset
15 #include "llvm/ADT/StringSwitch.h"
anatofuz
parents:
diff changeset
16 #include "gmock/gmock.h"
anatofuz
parents:
diff changeset
17 #include <type_traits>
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 namespace mlir {
anatofuz
parents:
diff changeset
20
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
21 /// Pull in generated enum utility declarations and definitions.
150
anatofuz
parents:
diff changeset
22 #include "StructAttrGenTest.h.inc"
anatofuz
parents:
diff changeset
23 #include "StructAttrGenTest.cpp.inc"
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
24
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
25 /// Helper that returns an example test::TestStruct for testing its
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
26 /// implementation.
150
anatofuz
parents:
diff changeset
27 static test::TestStruct getTestStruct(mlir::MLIRContext *context) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
28 auto integerType = mlir::IntegerType::get(context, 32);
150
anatofuz
parents:
diff changeset
29 auto integerAttr = mlir::IntegerAttr::get(integerType, 127);
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 auto floatType = mlir::FloatType::getF32(context);
anatofuz
parents:
diff changeset
32 auto floatAttr = mlir::FloatAttr::get(floatType, 0.25);
anatofuz
parents:
diff changeset
33
anatofuz
parents:
diff changeset
34 auto elementsType = mlir::RankedTensorType::get({2, 3}, integerType);
anatofuz
parents:
diff changeset
35 auto elementsAttr =
anatofuz
parents:
diff changeset
36 mlir::DenseIntElementsAttr::get(elementsType, {1, 2, 3, 4, 5, 6});
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
37 auto optionalAttr = nullptr;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
38 auto defaultValuedAttr = nullptr;
150
anatofuz
parents:
diff changeset
39
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
40 return test::TestStruct::get(integerAttr, floatAttr, elementsAttr,
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
41 optionalAttr, defaultValuedAttr, context);
150
anatofuz
parents:
diff changeset
42 }
anatofuz
parents:
diff changeset
43
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
44 /// Validates that test::TestStruct::classof correctly identifies a valid
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
45 /// test::TestStruct.
150
anatofuz
parents:
diff changeset
46 TEST(StructsGenTest, ClassofTrue) {
anatofuz
parents:
diff changeset
47 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
48 auto structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
49 ASSERT_TRUE(test::TestStruct::classof(structAttr));
anatofuz
parents:
diff changeset
50 }
anatofuz
parents:
diff changeset
51
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
52 /// Validates that test::TestStruct::classof fails when an extra attribute is in
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
53 /// the class.
150
anatofuz
parents:
diff changeset
54 TEST(StructsGenTest, ClassofExtraFalse) {
anatofuz
parents:
diff changeset
55 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
56 mlir::DictionaryAttr structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
57 auto expectedValues = structAttr.getValue();
anatofuz
parents:
diff changeset
58 ASSERT_EQ(expectedValues.size(), 3u);
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 // Copy the set of named attributes.
anatofuz
parents:
diff changeset
61 llvm::SmallVector<mlir::NamedAttribute, 5> newValues(expectedValues.begin(),
anatofuz
parents:
diff changeset
62 expectedValues.end());
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 // Add an extra NamedAttribute.
anatofuz
parents:
diff changeset
65 auto wrongId = mlir::Identifier::get("wrong", &context);
anatofuz
parents:
diff changeset
66 auto wrongAttr = mlir::NamedAttribute(wrongId, expectedValues[0].second);
anatofuz
parents:
diff changeset
67 newValues.push_back(wrongAttr);
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69 // Make a new DictionaryAttr and validate.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
70 auto badDictionary = mlir::DictionaryAttr::get(&context, newValues);
150
anatofuz
parents:
diff changeset
71 ASSERT_FALSE(test::TestStruct::classof(badDictionary));
anatofuz
parents:
diff changeset
72 }
anatofuz
parents:
diff changeset
73
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
74 /// Validates that test::TestStruct::classof fails when a NamedAttribute has an
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
75 /// incorrect name.
150
anatofuz
parents:
diff changeset
76 TEST(StructsGenTest, ClassofBadNameFalse) {
anatofuz
parents:
diff changeset
77 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
78 mlir::DictionaryAttr structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
79 auto expectedValues = structAttr.getValue();
anatofuz
parents:
diff changeset
80 ASSERT_EQ(expectedValues.size(), 3u);
anatofuz
parents:
diff changeset
81
anatofuz
parents:
diff changeset
82 // Create a copy of all but the first NamedAttributes.
anatofuz
parents:
diff changeset
83 llvm::SmallVector<mlir::NamedAttribute, 4> newValues(
anatofuz
parents:
diff changeset
84 expectedValues.begin() + 1, expectedValues.end());
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 // Add a copy of the first attribute with the wrong Identifier.
anatofuz
parents:
diff changeset
87 auto wrongId = mlir::Identifier::get("wrong", &context);
anatofuz
parents:
diff changeset
88 auto wrongAttr = mlir::NamedAttribute(wrongId, expectedValues[0].second);
anatofuz
parents:
diff changeset
89 newValues.push_back(wrongAttr);
anatofuz
parents:
diff changeset
90
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
91 auto badDictionary = mlir::DictionaryAttr::get(&context, newValues);
150
anatofuz
parents:
diff changeset
92 ASSERT_FALSE(test::TestStruct::classof(badDictionary));
anatofuz
parents:
diff changeset
93 }
anatofuz
parents:
diff changeset
94
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
95 /// Validates that test::TestStruct::classof fails when a NamedAttribute has an
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
96 /// incorrect type.
150
anatofuz
parents:
diff changeset
97 TEST(StructsGenTest, ClassofBadTypeFalse) {
anatofuz
parents:
diff changeset
98 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
99 mlir::DictionaryAttr structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
100 auto expectedValues = structAttr.getValue();
anatofuz
parents:
diff changeset
101 ASSERT_EQ(expectedValues.size(), 3u);
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103 // Create a copy of all but the last NamedAttributes.
anatofuz
parents:
diff changeset
104 llvm::SmallVector<mlir::NamedAttribute, 4> newValues(
anatofuz
parents:
diff changeset
105 expectedValues.begin(), expectedValues.end() - 1);
anatofuz
parents:
diff changeset
106
anatofuz
parents:
diff changeset
107 // Add a copy of the last attribute with the wrong type.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
108 auto i64Type = mlir::IntegerType::get(&context, 64);
150
anatofuz
parents:
diff changeset
109 auto elementsType = mlir::RankedTensorType::get({3}, i64Type);
anatofuz
parents:
diff changeset
110 auto elementsAttr =
anatofuz
parents:
diff changeset
111 mlir::DenseIntElementsAttr::get(elementsType, ArrayRef<int64_t>{1, 2, 3});
anatofuz
parents:
diff changeset
112 mlir::Identifier id = expectedValues.back().first;
anatofuz
parents:
diff changeset
113 auto wrongAttr = mlir::NamedAttribute(id, elementsAttr);
anatofuz
parents:
diff changeset
114 newValues.push_back(wrongAttr);
anatofuz
parents:
diff changeset
115
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
116 auto badDictionary = mlir::DictionaryAttr::get(&context, newValues);
150
anatofuz
parents:
diff changeset
117 ASSERT_FALSE(test::TestStruct::classof(badDictionary));
anatofuz
parents:
diff changeset
118 }
anatofuz
parents:
diff changeset
119
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
120 /// Validates that test::TestStruct::classof fails when a NamedAttribute is
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
121 /// missing.
150
anatofuz
parents:
diff changeset
122 TEST(StructsGenTest, ClassofMissingFalse) {
anatofuz
parents:
diff changeset
123 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
124 mlir::DictionaryAttr structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
125 auto expectedValues = structAttr.getValue();
anatofuz
parents:
diff changeset
126 ASSERT_EQ(expectedValues.size(), 3u);
anatofuz
parents:
diff changeset
127
anatofuz
parents:
diff changeset
128 // Copy a subset of the structures Named Attributes.
anatofuz
parents:
diff changeset
129 llvm::SmallVector<mlir::NamedAttribute, 3> newValues(
anatofuz
parents:
diff changeset
130 expectedValues.begin() + 1, expectedValues.end());
anatofuz
parents:
diff changeset
131
anatofuz
parents:
diff changeset
132 // Make a new DictionaryAttr and validate it is not a validate TestStruct.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
133 auto badDictionary = mlir::DictionaryAttr::get(&context, newValues);
150
anatofuz
parents:
diff changeset
134 ASSERT_FALSE(test::TestStruct::classof(badDictionary));
anatofuz
parents:
diff changeset
135 }
anatofuz
parents:
diff changeset
136
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
137 /// Validate the accessor for the FloatAttr value.
150
anatofuz
parents:
diff changeset
138 TEST(StructsGenTest, GetFloat) {
anatofuz
parents:
diff changeset
139 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
140 auto structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
141 auto returnedAttr = structAttr.sample_float();
anatofuz
parents:
diff changeset
142 EXPECT_EQ(returnedAttr.getValueAsDouble(), 0.25);
anatofuz
parents:
diff changeset
143 }
anatofuz
parents:
diff changeset
144
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
145 /// Validate the accessor for the IntegerAttr value.
150
anatofuz
parents:
diff changeset
146 TEST(StructsGenTest, GetInteger) {
anatofuz
parents:
diff changeset
147 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
148 auto structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
149 auto returnedAttr = structAttr.sample_integer();
anatofuz
parents:
diff changeset
150 EXPECT_EQ(returnedAttr.getInt(), 127);
anatofuz
parents:
diff changeset
151 }
anatofuz
parents:
diff changeset
152
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
153 /// Validate the accessor for the ElementsAttr value.
150
anatofuz
parents:
diff changeset
154 TEST(StructsGenTest, GetElements) {
anatofuz
parents:
diff changeset
155 mlir::MLIRContext context;
anatofuz
parents:
diff changeset
156 auto structAttr = getTestStruct(&context);
anatofuz
parents:
diff changeset
157 auto returnedAttr = structAttr.sample_elements();
anatofuz
parents:
diff changeset
158 auto denseAttr = returnedAttr.dyn_cast<mlir::DenseElementsAttr>();
anatofuz
parents:
diff changeset
159 ASSERT_TRUE(denseAttr);
anatofuz
parents:
diff changeset
160
anatofuz
parents:
diff changeset
161 for (const auto &valIndexIt : llvm::enumerate(denseAttr.getIntValues())) {
anatofuz
parents:
diff changeset
162 EXPECT_EQ(valIndexIt.value(), valIndexIt.index() + 1);
anatofuz
parents:
diff changeset
163 }
anatofuz
parents:
diff changeset
164 }
anatofuz
parents:
diff changeset
165
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
166 TEST(StructsGenTest, EmptyOptional) {
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
167 mlir::MLIRContext context;
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
168 auto structAttr = getTestStruct(&context);
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
169 EXPECT_EQ(structAttr.sample_optional_integer(), nullptr);
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
170 }
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
171
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
172 TEST(StructsGenTest, GetDefaultValuedAttr) {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
173 mlir::MLIRContext context;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
174 mlir::Builder builder(&context);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
175 auto structAttr = getTestStruct(&context);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
176 EXPECT_EQ(structAttr.sample_default_valued_integer(),
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
177 builder.getI32IntegerAttr(42));
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
178 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
179
150
anatofuz
parents:
diff changeset
180 } // namespace mlir