@@ -110,4 +110,76 @@ TEST_F(MidendTest, SimpleVertexSetDeclAllocWithMain) {
110
110
" const vertices : vertexset{Vertex} = new vertexset{Vertex}(5);\n "
111
111
" func main() print 4; end" );
112
112
EXPECT_EQ (0 , basicTest (is));
113
- }
113
+ }
114
+
115
+ // Test cases for the MIRMetadata API
116
+ TEST_F (MidendTest, SimpleMetadataTest) {
117
+ istringstream is (" func main() print 4; end" );
118
+ EXPECT_EQ (0 , basicTest (is));
119
+ EXPECT_EQ (true , mir_context_->isFunction (" main" ));
120
+
121
+ mir::FuncDecl::Ptr main_func = mir_context_->getFunction (" main" );
122
+
123
+ main_func->setMetadata <bool >(" basic_boolean_md" , true );
124
+ main_func->setMetadata <int >(" basic_int_md" , 42 );
125
+ EXPECT_EQ (true , main_func->hasMetadata <bool >(" basic_boolean_md" ));
126
+ EXPECT_EQ (true , main_func->getMetadata <bool >(" basic_boolean_md" ));
127
+
128
+ EXPECT_EQ (true , main_func->hasMetadata <int >(" basic_int_md" ));
129
+ EXPECT_EQ (42 , main_func->getMetadata <int >(" basic_int_md" ));
130
+
131
+ }
132
+ TEST_F (MidendTest, SimpleMetadataTestNoExist) {
133
+ istringstream is (" func main() print 4; end" );
134
+ EXPECT_EQ (0 , basicTest (is));
135
+ EXPECT_EQ (true , mir_context_->isFunction (" main" ));
136
+
137
+ mir::FuncDecl::Ptr main_func = mir_context_->getFunction (" main" );
138
+
139
+ main_func->setMetadata <int >(" basic_int_md" , 42 );
140
+ EXPECT_EQ (false , main_func->hasMetadata <int >(" other_int_md" ));
141
+ EXPECT_EQ (false , main_func->hasMetadata <bool >(" basic_int_md" ));
142
+ }
143
+
144
+ TEST_F (MidendTest, SimpleMetadataTestString) {
145
+ istringstream is (" func main() print 4; end" );
146
+ EXPECT_EQ (0 , basicTest (is));
147
+ EXPECT_EQ (true , mir_context_->isFunction (" main" ));
148
+
149
+ mir::FuncDecl::Ptr main_func = mir_context_->getFunction (" main" );
150
+
151
+ main_func->setMetadata <std::string>(" basic_str_md" , " md value" );
152
+ EXPECT_EQ (true , main_func->hasMetadata <std::string>(" basic_str_md" ));
153
+ EXPECT_EQ (" md value" , main_func->getMetadata <std::string>(" basic_str_md" ));
154
+ }
155
+
156
+ TEST_F (MidendTest, SimpleMetadataTestMIRNodeAsMD) {
157
+ istringstream is (" const val:int = 42;\n func main() print val; end" );
158
+ EXPECT_EQ (0 , basicTest (is));
159
+ EXPECT_EQ (true , mir_context_->isFunction (" main" ));
160
+ EXPECT_EQ (1 , mir_context_->getConstants ().size ());
161
+
162
+ mir::FuncDecl::Ptr main_func = mir_context_->getFunction (" main" );
163
+ mir::VarDecl::Ptr decl = mir_context_->getConstants ()[0 ];
164
+
165
+ main_func->setMetadata <mir::MIRNode::Ptr >(" used_var_md" , decl);
166
+
167
+ EXPECT_EQ (true , main_func->hasMetadata <mir::MIRNode::Ptr >(" used_var_md" ));
168
+ mir::MIRNode::Ptr mdnode = main_func->getMetadata <mir::MIRNode::Ptr >(" used_var_md" );
169
+ EXPECT_EQ (true , mir::isa<mir::VarDecl>(mdnode));
170
+ }
171
+
172
+ TEST_F (MidendTest, SimpleMetadataTestMIRNodeVectorAsMD) {
173
+ istringstream is (" const val:int = 42;\n const val2: int = 55;\n func main() print val + val2; end" );
174
+ EXPECT_EQ (0 , basicTest (is));
175
+ EXPECT_EQ (true , mir_context_->isFunction (" main" ));
176
+ EXPECT_EQ (2 , mir_context_->getConstants ().size ());
177
+
178
+ mir::FuncDecl::Ptr main_func = mir_context_->getFunction (" main" );
179
+ std::vector<mir::VarDecl::Ptr > decls = mir_context_->getConstants ();
180
+
181
+ main_func->setMetadata <std::vector<mir::VarDecl::Ptr >>(" used_vars_md" , decls);
182
+
183
+ EXPECT_EQ (true , main_func->hasMetadata <std::vector<mir::VarDecl::Ptr >>(" used_vars_md" ));
184
+ EXPECT_EQ (2 , main_func->getMetadata <std::vector<mir::VarDecl::Ptr >>(" used_vars_md" ).size ());
185
+ }
0 commit comments