@@ -98,26 +98,77 @@ TEST(nntrainer_SubGraph, create_subgraph_02_p) {
98
98
}
99
99
100
100
/* *
101
- * @brief Unittest to create a subgraph with layers
102
- * create a graph
101
+ * @brief Unittest for `addSubGraph`
103
102
*/
104
- TEST (nntrainer_SubGraph, create_subgraph_03_p) {
103
+ TEST (nntrainer_SubGraph, add_subgraph_01_p) {
104
+ static auto &ac = nntrainer::AppContext::Global ();
105
+ std::shared_ptr<ml::train::Model> model =
106
+ ml::train::createModel (ml::train::ModelType::NEURAL_NET);
107
+ std::shared_ptr<ml::train::SubGraph> sg =
108
+ ml::train::createSubGraph (" subgraph" , {" subgraph_name=graph0" });
109
+ EXPECT_EQ (sg->getName (), " graph0" );
110
+ EXPECT_EQ (model->addSubGraph (sg), ML_ERROR_NONE);
111
+ }
112
+
113
+ /* *
114
+ * @brief Test to add multiple subgraphs.
115
+ */
116
+ TEST (nntrainer_SubGraph, add_subgraph_02_p) {
117
+ static auto &ac = nntrainer::AppContext::Global ();
118
+ std::shared_ptr<ml::train::Model> model =
119
+ ml::train::createModel (ml::train::ModelType::NEURAL_NET);
120
+
121
+ std::vector<std::shared_ptr<ml::train::SubGraph>> subgraphs;
122
+ for (int i = 0 ; i < 5 ; ++i)
123
+ subgraphs.push_back (ml::train::createSubGraph (
124
+ ml::train::SubGraphType::SUBGRAPH_CPU,
125
+ {withKey (" subgraph_name" , " subgraph_" + std::to_string (i))}));
126
+
127
+ for (int i = 0 ; i < 5 ; ++i)
128
+ EXPECT_EQ (model->addSubGraph (subgraphs[i]), ML_ERROR_NONE);
129
+ model->summarize (std::cout, ml_train_summary_type_e::ML_TRAIN_SUMMARY_MODEL);
130
+ subgraphs.clear ();
131
+ }
132
+
133
+ /* *
134
+ * @brief Negative unittest for `addSubGraph`
135
+ * @note Please note that model create `default` subgraph by default
136
+ */
137
+ TEST (nntrainer_SubGraph, add_subgraph_01_n) {
105
138
static auto &ac = nntrainer::AppContext::Global ();
106
139
107
- // subgraph named `default`
108
140
std::shared_ptr<ml::train::Model> model1 =
109
141
ml::train::createModel (ml::train::ModelType::NEURAL_NET);
110
- model1->addSubGraph (ml::train::createSubGraph (" subgraph" ));
111
- model1->addLayer (ml::train::createLayer (
112
- " fully_connected" , {withKey (" name" , " fc0" ), withKey (" unit" , 2 )}));
113
142
114
- // subgraph named `default`
115
- std::shared_ptr<ml::train::Model> model2 =
143
+ // subgraph named `default` <- invalid
144
+ // add default SubGraph returns ML_ERROR_INVALID_PARAMETER
145
+ EXPECT_EQ (model1->addSubGraph (ml::train::createSubGraph (" subgraph" )),
146
+ ML_ERROR_INVALID_PARAMETER);
147
+ EXPECT_EQ (model1->addSubGraph (
148
+ ml::train::createSubGraph (ml::train::SubGraphType::SUBGRAPH_CPU)),
149
+ ML_ERROR_INVALID_PARAMETER);
150
+ }
151
+
152
+ /* *
153
+ * @brief Test to add multiple subgraphs with same name.
154
+ * error handling sohlud be done.
155
+ */
156
+ TEST (nntrainer_SubGraph, add_subgraph_02_n) {
157
+ static auto &ac = nntrainer::AppContext::Global ();
158
+ std::shared_ptr<ml::train::Model> model =
116
159
ml::train::createModel (ml::train::ModelType::NEURAL_NET);
117
- model2->addLayer (ml::train::createLayer (
118
- " fully_connected" , {withKey (" name" , " fc0" ), withKey (" unit" , 2 )}));
119
160
120
- EXPECT_EQ (*NNPTR (model1) == *NNPTR (model2), true );
161
+ std::vector<std::shared_ptr<ml::train::SubGraph>> subgraphs;
162
+ for (int i = 0 ; i < 5 ; ++i)
163
+ subgraphs.push_back (
164
+ ml::train::createSubGraph (ml::train::SubGraphType::SUBGRAPH_CPU,
165
+ {withKey (" subgraph_name" , " subgraph" )}));
166
+
167
+ EXPECT_EQ (model->addSubGraph (subgraphs[0 ]), ML_ERROR_NONE);
168
+ for (int i = 1 ; i < 5 ; ++i)
169
+ EXPECT_EQ (model->addSubGraph (subgraphs[i]), ML_ERROR_INVALID_PARAMETER);
170
+
171
+ subgraphs.clear ();
121
172
}
122
173
123
174
/* *
@@ -130,7 +181,7 @@ TEST(nntrainer_SubGraph, create_subgraph_04_p) {
130
181
std::shared_ptr<ml::train::Model> model1 =
131
182
ml::train::createModel (ml::train::ModelType::NEURAL_NET);
132
183
std::shared_ptr<ml::train::SubGraph> sg =
133
- ml::train::createSubGraph (" subgraph" );
184
+ ml::train::createSubGraph (" subgraph" , { " subgraph_name=graph0 " } );
134
185
// 2. add three layers to subgraph
135
186
sg->addLayer (ml::train::createLayer (
136
187
" fully_connected" , {withKey (" name" , " fc0" ), withKey (" unit" , 2 )}));
@@ -140,6 +191,7 @@ TEST(nntrainer_SubGraph, create_subgraph_04_p) {
140
191
" fully_connected" , {withKey (" name" , " fc2" ), withKey (" unit" , 2 )}));
141
192
// 3. add a subgraph to model
142
193
model1->addSubGraph (sg);
194
+ model1->summarize (std::cout, ml_train_summary_type_e::ML_TRAIN_SUMMARY_MODEL);
143
195
144
196
// add three layers to model directly
145
197
// It implies a default subgraph creation and adding layers to the defulat
@@ -152,8 +204,12 @@ TEST(nntrainer_SubGraph, create_subgraph_04_p) {
152
204
" fully_connected" , {withKey (" name" , " fc1" ), withKey (" unit" , 2 )}));
153
205
model2->addLayer (ml::train::createLayer (
154
206
" fully_connected" , {withKey (" name" , " fc2" ), withKey (" unit" , 2 )}));
207
+ model2->summarize (std::cout, ml_train_summary_type_e::ML_TRAIN_SUMMARY_MODEL);
155
208
156
- EXPECT_EQ (*NNPTR (model1) == *NNPTR (model2), true );
209
+ EXPECT_EQ (is_representation_equal (NNPTR (model1)->getFlatGraph (),
210
+ NNPTR (model2)->getFlatGraph ()),
211
+ true );
212
+ EXPECT_EQ (*NNPTR (model1) == *NNPTR (model2), false );
157
213
}
158
214
159
215
/* *
@@ -169,7 +225,8 @@ TEST(nntrainer_SubGraph, create_subgraph_05_n) {
169
225
model1->addSubGraph (ml::train::createSubGraph (
170
226
" subgraph" , {withKey (" subgraph_name" , " graph_1" )}));
171
227
model1->addLayer (ml::train::createLayer (
172
- " fully_connected" , {withKey (" name" , " fc0" ), withKey (" unit" , 2 )}));
228
+ " fully_connected" , {withKey (" name" , " fc0" ), withKey (" unit" , 2 ),
229
+ withKey (" subgraph_name" , " graph_1" )}));
173
230
174
231
// subgraph named `default`
175
232
std::shared_ptr<ml::train::Model> model2 =
@@ -179,11 +236,12 @@ TEST(nntrainer_SubGraph, create_subgraph_05_n) {
179
236
180
237
// not equal model (subgraph name is different)
181
238
EXPECT_EQ (*NNPTR (model1) == *NNPTR (model2), false );
182
-
183
- // layer nodes are equal
184
239
EXPECT_EQ (is_representation_equal (NNPTR (model1)->getFlatGraph (),
185
240
NNPTR (model2)->getFlatGraph ()),
186
- true );
241
+ false );
242
+
243
+ model1->summarize (std::cout, ml_train_summary_type_e::ML_TRAIN_SUMMARY_MODEL);
244
+ model2->summarize (std::cout, ml_train_summary_type_e::ML_TRAIN_SUMMARY_MODEL);
187
245
}
188
246
189
247
int main (int argc, char **argv) {
0 commit comments