@@ -110,4 +110,76 @@ TEST_F(MidendTest, SimpleVertexSetDeclAllocWithMain) {
110110 " const vertices : vertexset{Vertex} = new vertexset{Vertex}(5);\n "
111111 " func main() print 4; end" );
112112 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