• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <vector>
17 #include <string>
18 #include <iostream>
19 #include "nncore_utils.h"
20 
21 using namespace testing::ext;
22 using namespace OHOS::NeuralNetworkRuntime::Test;
23 class SparseToDenseTest : public testing::Test {};
24 
25 struct SparseToDenseModel1 {
26     const std::vector<int32_t> indices_shape = {2, 2};
27     const std::vector<int32_t> value_shape = {2};
28     const std::vector<int32_t> output_shape = {2, 3};
29 
30     float indicesValue[2][2] = {{0, 0}, {1, 2}};
31     float valueValue[2] = {1, 2};
32     float sparseShapeValue[2] = {2, 3};
33     float outputValue[2][3] = {0};
34 
35     OHNNOperandTest indices = {OH_NN_FLOAT32, OH_NN_TENSOR, indices_shape, indicesValue, 4*sizeof(bool)};
36     OHNNOperandTest value = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, valueValue, 2*sizeof(float)};
37     OHNNOperandTest sparseDense = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, sparseShapeValue, 2*sizeof(float)};
38     OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 6*sizeof(float)};
39     OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_SPARSE_TO_DENSE,
40                                .operands = {indices, value, sparseDense, output},
41                                .paramIndices = {},
42                                .inputIndices = {0, 1, 2},
43                                .outputIndices = {3}};
44 };
45 
46 struct SparseToDenseModel2 {
47     const std::vector<int32_t> indices_shape = {3, 2};
48     const std::vector<int32_t> value_shape = {3};
49     const std::vector<int32_t> sparse_dense_shape = {2};
50     const std::vector<int32_t> output_shape = {2, 3};
51 
52     float indicesValue[3][2] = {{0, 1}, {1, 1}, {1, 2}};
53     float valueValue[3] = {3, 4, 5};
54     float sparseShapeValue[3] = {2, 3};
55     float outputValue[2][3] = {0};
56 
57     OHNNOperandTest indices = {OH_NN_FLOAT32, OH_NN_TENSOR, indices_shape, indicesValue, 6*sizeof(bool)};
58     OHNNOperandTest value = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, valueValue, 3*sizeof(float)};
59     OHNNOperandTest sparseDense = {OH_NN_FLOAT32, OH_NN_TENSOR, sparse_dense_shape, sparseShapeValue, 2*sizeof(float)};
60     OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 6*sizeof(float)};
61     OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_SPARSE_TO_DENSE,
62                                .operands = {indices, value, sparseDense, output},
63                                .paramIndices = {},
64                                .inputIndices = {0, 1, 2},
65                                .outputIndices = {3}};
66 };
67 
68 struct SparseToDenseModel3 {
69     const std::vector<int32_t> indices_shape = {2, 2};
70     const std::vector<int32_t> value_shape = {2};
71     const std::vector<int32_t> output_shape = {3, 4};
72 
73     float indicesValue[2][2] = {{1, 0}, {0, 3}};
74     float valueValue[2] = {9, 10};
75     float sparseShapeValue[2] = {3, 4};
76     float outputValue[3][4] = {0};
77 
78     OHNNOperandTest indices = {OH_NN_FLOAT32, OH_NN_TENSOR, indices_shape, indicesValue, 4*sizeof(bool)};
79     OHNNOperandTest value = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, valueValue, 2*sizeof(float)};
80     OHNNOperandTest sparseDense = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, sparseShapeValue, 2*sizeof(float)};
81     OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 12*sizeof(float)};
82     OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_SPARSE_TO_DENSE,
83                                .operands = {indices, value, sparseDense, output},
84                                .paramIndices = {},
85                                .inputIndices = {0, 1, 2},
86                                .outputIndices = {3}};
87 };
88 
89 struct SparseToDenseModel4 {
90     const std::vector<int32_t> indices_shape = {4};
91     const std::vector<int32_t> value_shape = {2};
92     const std::vector<int32_t> output_shape = {2, 3};
93 
94     float indicesValue[4] = {0, 0, 1, 2};
95     float valueValue[2] = {1, 2};
96     float sparseShapeValue[2] = {2, 3};
97     float outputValue[2][3] = {0};
98 
99     OHNNOperandTest indices = {OH_NN_FLOAT32, OH_NN_TENSOR, indices_shape, indicesValue, 4*sizeof(bool)};
100     OHNNOperandTest value = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, valueValue, 2*sizeof(float)};
101     OHNNOperandTest sparseDense = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, sparseShapeValue, 2*sizeof(float)};
102     OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 6*sizeof(float)};
103     OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_SPARSE_TO_DENSE,
104                                .operands = {indices, value, sparseDense, output},
105                                .paramIndices = {},
106                                .inputIndices = {0, 1, 2},
107                                .outputIndices = {3}};
108 };
109 
110 struct SparseToDenseModel5 {
111     const std::vector<int32_t> indices_shape = {2, 2};
112     const std::vector<int32_t> value_shape = {1, 2};
113     const std::vector<int32_t> sparse_dense_shape = {2};
114     const std::vector<int32_t> output_shape = {3, 4};
115 
116     float indicesValue[2][2] = {{0, 0}, {1, 2}};
117     float valueValue[1][2] = {{1, 2}};
118     float sparseShapeValue[2] = {2, 3};
119     float outputValue[2][3] = {0};
120 
121     OHNNOperandTest indices = {OH_NN_FLOAT32, OH_NN_TENSOR, indices_shape, indicesValue, 4*sizeof(bool)};
122     OHNNOperandTest value = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, valueValue, 2*sizeof(float)};
123     OHNNOperandTest sparseDense = {OH_NN_FLOAT32, OH_NN_TENSOR, sparse_dense_shape, sparseShapeValue, 2*sizeof(float)};
124     OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 6*sizeof(float)};
125     OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_SPARSE_TO_DENSE,
126                                .operands = {indices, value, sparseDense, output},
127                                .paramIndices = {},
128                                .inputIndices = {0, 1, 2},
129                                .outputIndices = {3}};
130 };
131 
132 struct SparseToDenseModel6 {
133     const std::vector<int32_t> indices_shape = {2, 2};
134     const std::vector<int32_t> value_shape = {2};
135     const std::vector<int32_t> sparse_dense_shape = {3};
136     const std::vector<int32_t> output_shape = {3, 4};
137 
138     float indicesValue[2][2] = {{0, 0}, {1, 2}};
139     float valueValue[2] = {1, 2};
140     float sparseShapeValue[3] = {2, 3, 1};
141     float outputValue[2][3][1] = {0};
142 
143     OHNNOperandTest indices = {OH_NN_FLOAT32, OH_NN_TENSOR, indices_shape, indicesValue, 4*sizeof(bool)};
144     OHNNOperandTest value = {OH_NN_FLOAT32, OH_NN_TENSOR, value_shape, valueValue, 2*sizeof(float)};
145     OHNNOperandTest sparseDense = {OH_NN_FLOAT32, OH_NN_TENSOR, sparse_dense_shape, sparseShapeValue, 3*sizeof(float)};
146     OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 6*sizeof(float)};
147     OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_SPARSE_TO_DENSE,
148                                .operands = {indices, value, sparseDense, output},
149                                .paramIndices = {},
150                                .inputIndices = {0, 1, 2},
151                                .outputIndices = {3}};
152 };
153 
154 /**
155  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_01
156  * @tc.desc: SparseToDenseModel1模型build测试
157  * @tc.type: FUNC
158  */
159 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_01, Function | MediumTest | Level1)
160 {
161     OH_NNModel *model = OH_NNModel_Construct();
162     EXPECT_NE(nullptr, model);
163 
164     SparseToDenseModel1 sparseToDenseModel;
165     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
166     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
167 
168     OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
169     EXPECT_NE(nullptr, compilation);
170 
171     OHNNCompileParam compileParam{
172         .performanceMode = OH_NN_PERFORMANCE_HIGH,
173         .priority = OH_NN_PRIORITY_HIGH,
174     };
175     EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
176 
177     OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
178     EXPECT_NE(nullptr, executor);
179 
180     Free(model, compilation, executor);
181 }
182 
183 /**
184  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_02
185  * @tc.desc: SparseToDenseModel2模型build测试
186  * @tc.type: FUNC
187  */
188 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_02, Function | MediumTest | Level1)
189 {
190     OH_NNModel *model = OH_NNModel_Construct();
191     EXPECT_NE(nullptr, model);
192 
193     SparseToDenseModel2 sparseToDenseModel;
194     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
195     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
196 
197     OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
198     EXPECT_NE(nullptr, compilation);
199 
200     OHNNCompileParam compileParam{
201         .performanceMode = OH_NN_PERFORMANCE_HIGH,
202         .priority = OH_NN_PRIORITY_HIGH,
203     };
204     EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
205 
206     OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
207     EXPECT_NE(nullptr, executor);
208 
209     Free(model, compilation, executor);
210 }
211 
212 /**
213  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_03
214  * @tc.desc: SparseToDenseModel3模型build测试
215  * @tc.type: FUNC
216  */
217 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_03, Function | MediumTest | Level1)
218 {
219     OH_NNModel *model = OH_NNModel_Construct();
220     EXPECT_NE(nullptr, model);
221 
222     SparseToDenseModel3 sparseToDenseModel;
223     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
224     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
225 
226     OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
227     EXPECT_NE(nullptr, compilation);
228 
229     OHNNCompileParam compileParam{
230         .performanceMode = OH_NN_PERFORMANCE_HIGH,
231         .priority = OH_NN_PRIORITY_HIGH,
232     };
233     EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
234 
235     OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
236     EXPECT_NE(nullptr, executor);
237 
238     Free(model, compilation, executor);
239 }
240 
241 /**
242  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_04
243  * @tc.desc: SparseToDenseModel4模型build测试
244  * @tc.type: FUNC
245  */
246 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_04, Function | MediumTest | Level1)
247 {
248     OH_NNModel *model = OH_NNModel_Construct();
249     EXPECT_NE(nullptr, model);
250 
251     SparseToDenseModel4 sparseToDenseModel;
252     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
253     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
254 
255     OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
256     EXPECT_NE(nullptr, compilation);
257 
258     OHNNCompileParam compileParam{
259         .performanceMode = OH_NN_PERFORMANCE_HIGH,
260         .priority = OH_NN_PRIORITY_HIGH,
261     };
262     EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
263 
264     OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
265     EXPECT_NE(nullptr, executor);
266 
267     Free(model, compilation, executor);
268 }
269 
270 /**
271  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_05
272  * @tc.desc: SparseToDenseModel5模型build测试
273  * @tc.type: FUNC
274  */
275 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_05, Function | MediumTest | Level1)
276 {
277     OH_NNModel *model = OH_NNModel_Construct();
278     EXPECT_NE(nullptr, model);
279 
280     SparseToDenseModel5 sparseToDenseModel;
281     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
282     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
283 
284     OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
285     EXPECT_NE(nullptr, compilation);
286 
287     OHNNCompileParam compileParam{
288         .performanceMode = OH_NN_PERFORMANCE_HIGH,
289         .priority = OH_NN_PRIORITY_HIGH,
290     };
291     EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
292 
293     OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
294     EXPECT_NE(nullptr, executor);
295 
296     Free(model, compilation, executor);
297 }
298 
299 /**
300  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_06
301  * @tc.desc: SparseToDenseModel6模型build测试
302  * @tc.type: FUNC
303  */
304 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_06, Function | MediumTest | Level1)
305 {
306     OH_NNModel *model = OH_NNModel_Construct();
307     EXPECT_NE(nullptr, model);
308 
309     SparseToDenseModel6 sparseToDenseModel;
310     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
311     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
312 
313     OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
314     EXPECT_NE(nullptr, compilation);
315 
316     OHNNCompileParam compileParam{
317         .performanceMode = OH_NN_PERFORMANCE_HIGH,
318         .priority = OH_NN_PRIORITY_HIGH,
319     };
320     EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
321 
322     OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
323     EXPECT_NE(nullptr, executor);
324 
325     Free(model, compilation, executor);
326 }
327 
328 /**
329  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_07
330  * @tc.desc: SparseToDenseModel1模型输入Tensor+1进行build测试
331  * @tc.type: FUNC
332  */
333 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_07, Function | MediumTest | Level2)
334 {
335     OH_NNModel *model = OH_NNModel_Construct();
336     EXPECT_NE(nullptr, model);
337 
338     SparseToDenseModel1 sparseToDenseModel;
339     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
340     graphArgs.operands = {sparseToDenseModel.indices, sparseToDenseModel.value, sparseToDenseModel.sparseDense,
341                           sparseToDenseModel.value, sparseToDenseModel.output};
342     graphArgs.inputIndices = {0, 1, 2, 3};
343     graphArgs.outputIndices = {4};
344     EXPECT_EQ(OH_NN_INVALID_PARAMETER, BuildSingleOpGraph(model, graphArgs));
345 
346     Free(model, nullptr, nullptr);
347 }
348 
349 /**
350  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_08
351  * @tc.desc: SparseToDenseModel1模型输出Tensor+1进行build测试
352  * @tc.type: FUNC
353  */
354 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_08, Function | MediumTest | Level2)
355 {
356     OH_NNModel *model = OH_NNModel_Construct();
357     EXPECT_NE(nullptr, model);
358 
359     SparseToDenseModel1 sparseToDenseModel;
360     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
361     graphArgs.operands = {sparseToDenseModel.indices, sparseToDenseModel.value, sparseToDenseModel.sparseDense,
362                           sparseToDenseModel.output, sparseToDenseModel.output};
363     graphArgs.inputIndices = {0, 1, 2};
364     graphArgs.outputIndices = {3, 4};
365     EXPECT_EQ(OH_NN_INVALID_PARAMETER, BuildSingleOpGraph(model, graphArgs));
366 
367     Free(model, nullptr, nullptr);
368 }
369 
370 /**
371  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Build_09
372  * @tc.desc: SparseToDenseModel1模型传入非法参数进行build测试
373  * @tc.type: FUNC
374  */
375 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Build_09, Function | MediumTest | Level2)
376 {
377     OH_NNModel *model = OH_NNModel_Construct();
378     EXPECT_NE(nullptr, model);
379 
380     SparseToDenseModel1 sparseToDenseModel;
381     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
382 
383     int8_t activationValue = OH_NN_FUSED_NONE;
384     OHNNOperandTest activation = {OH_NN_INT8, OH_NN_ADD_ACTIVATIONTYPE, {}, &activationValue, sizeof(int8_t)};
385     graphArgs.operands = {sparseToDenseModel.indices, sparseToDenseModel.value, sparseToDenseModel.sparseDense,
386                           sparseToDenseModel.output, activation};
387     graphArgs.paramIndices = {4};
388     EXPECT_EQ(OH_NN_INVALID_PARAMETER, BuildSingleOpGraph(model, graphArgs));
389 
390     Free(model, nullptr, nullptr);
391 }
392 
393 /**
394  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_Finish_01
395  * @tc.desc: 模型构图,未添加操作数
396  * @tc.type: FUNC
397  */
398 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_Finish_01, Function | MediumTest | Level2)
399 {
400     OH_NNModel *model = OH_NNModel_Construct();
401     EXPECT_NE(nullptr, model);
402 
403     OHNNGraphArgs graphArgs;
404     EXPECT_EQ(OH_NN_INVALID_PARAMETER, SingleModelBuildEndStep(model, graphArgs));
405 
406     Free(model, nullptr, nullptr);
407 }
408 
409 /**
410  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_Finish_02
411  * @tc.desc: 模型构图,未设置输入输出
412  * @tc.type: FUNC
413  */
414 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_Finish_02, Function | MediumTest | Level2)
415 {
416     OH_NNModel *model = OH_NNModel_Construct();
417     EXPECT_NE(nullptr, model);
418 
419     SparseToDenseModel1 sparseToDenseModel;
420     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
421     graphArgs.specifyIO = false;
422     EXPECT_EQ(OH_NN_OPERATION_FORBIDDEN, BuildSingleOpGraph(model, graphArgs));
423 
424     Free(model, nullptr, nullptr);
425 }
426 
427 /**
428  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_Finish_03
429  * @tc.desc: 模型构图,设置输入输出,构图成功
430  * @tc.type: FUNC
431  */
432 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_Finish_03, Function | MediumTest | Level1)
433 {
434     OH_NNModel *model = OH_NNModel_Construct();
435     EXPECT_NE(nullptr, model);
436 
437     SparseToDenseModel1 sparseToDenseModel;
438     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
439     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
440 
441     Free(model, nullptr, nullptr);
442 }
443 
444 /**
445  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SetOperandValue_01
446  * @tc.desc: 设置操作数值,操作数不存在
447  * @tc.type: FUNC
448  */
449 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SetOperandValue_01,
450          Function | MediumTest | Level2)
451 {
452     OH_NNModel *model = OH_NNModel_Construct();
453     EXPECT_NE(nullptr, model);
454 
455     SparseToDenseModel1 sparseToDenseModel;
456     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
457 
458     NN_TensorDesc* tensorDesc = nullptr;
459     std::vector<NN_TensorDesc*> tensorDescVec;
460 
461     for (size_t i = 0; i < graphArgs.operands.size(); i++) {
462         const OHNNOperandTest &operandTem = graphArgs.operands[i];
463         tensorDesc = createTensorDesc(operandTem.shape.data(),
464                                       (uint32_t) operandTem.shape.size(),
465                                       operandTem.dataType, operandTem.format);
466         tensorDescVec.emplace_back(tensorDesc);
467         EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
468         EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, i, operandTem.type));
469 
470         if (std::find(graphArgs.paramIndices.begin(), graphArgs.paramIndices.end(), i) !=
471             graphArgs.paramIndices.end()) {
472             EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(
473                 model, 1000+i, operandTem.data, operandTem.length));
474         }
475     }
476 
477     FreeTensorDescVec(tensorDescVec);
478     Free(model, nullptr, nullptr);
479 }
480 
481 /**
482  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SetOperandValue_02
483  * @tc.desc: 设置操作数值,buufer为nullptr
484  * @tc.type: FUNC
485  */
486 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SetOperandValue_02,
487          Function | MediumTest | Level2)
488 {
489     OH_NNModel *model = OH_NNModel_Construct();
490     EXPECT_NE(nullptr, model);
491 
492     SparseToDenseModel1 sparseToDenseModel;
493     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
494 
495     NN_TensorDesc* tensorDesc = nullptr;
496     std::vector<NN_TensorDesc*> tensorDescVec;
497 
498     for (size_t i = 0; i < graphArgs.operands.size(); i++) {
499         const OHNNOperandTest &operandTem = graphArgs.operands[i];
500         tensorDesc = createTensorDesc(operandTem.shape.data(),
501                                       (uint32_t) operandTem.shape.size(),
502                                       operandTem.dataType, operandTem.format);
503         tensorDescVec.emplace_back(tensorDesc);
504         EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
505         EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, i, operandTem.type));
506 
507         if (std::find(graphArgs.paramIndices.begin(), graphArgs.paramIndices.end(), i) !=
508             graphArgs.paramIndices.end()) {
509             EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, i, nullptr, operandTem.length));
510         }
511     }
512 
513     FreeTensorDescVec(tensorDescVec);
514     Free(model, nullptr, nullptr);
515 }
516 
517 /**
518  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SetOperandValue_03
519  * @tc.desc: 设置操作数值,length为0
520  * @tc.type: FUNC
521  */
522 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SetOperandValue_03,
523          Function | MediumTest | Level2)
524 {
525     OH_NNModel *model = OH_NNModel_Construct();
526     EXPECT_NE(nullptr, model);
527 
528     SparseToDenseModel1 sparseToDenseModel;
529     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
530 
531     NN_TensorDesc* tensorDesc = nullptr;
532     std::vector<NN_TensorDesc*> tensorDescVec;
533 
534     for (size_t i = 0; i < graphArgs.operands.size(); i++) {
535         const OHNNOperandTest &operandTem = graphArgs.operands[i];
536         tensorDesc = createTensorDesc(operandTem.shape.data(),
537                                       (uint32_t) operandTem.shape.size(),
538                                       operandTem.dataType, operandTem.format);
539         tensorDescVec.emplace_back(tensorDesc);
540         EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
541         EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, i, operandTem.type));
542 
543         if (std::find(graphArgs.paramIndices.begin(), graphArgs.paramIndices.end(), i) !=
544             graphArgs.paramIndices.end()) {
545             EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, 1000+i, operandTem.data, 0));
546         }
547     }
548 
549     FreeTensorDescVec(tensorDescVec);
550     Free(model, nullptr, nullptr);
551 }
552 
553 /**
554  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_01
555  * @tc.desc: 设置输入输出,inputIndices为nullptr
556  * @tc.type: FUNC
557  */
558 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_01,
559          Function | MediumTest | Level2)
560 {
561     OH_NNModel *model = OH_NNModel_Construct();
562     EXPECT_NE(nullptr, model);
563 
564     SparseToDenseModel1 sparseToDenseModel;
565     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
566     graphArgs.specifyIO = false;
567     graphArgs.build = false;
568     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
569 
570     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
571     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
572     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, nullptr, &outputIndices));
573 
574     Free(model, nullptr, nullptr);
575 }
576 
577 /**
578  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_02
579  * @tc.desc: 设置输入输出,inputindices中data为nullptr
580  * @tc.type: FUNC
581  */
582 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_02,
583          Function | MediumTest | Level2)
584 {
585     OH_NNModel *model = OH_NNModel_Construct();
586     EXPECT_NE(nullptr, model);
587 
588     SparseToDenseModel1 sparseToDenseModel;
589     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
590     graphArgs.specifyIO = false;
591     graphArgs.build = false;
592     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
593 
594     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
595     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
596     inputIndices.data = nullptr;
597     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
598 
599     Free(model, nullptr, nullptr);
600 }
601 
602 /**
603  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_03
604  * @tc.desc: 设置输入输出,inputindices中data对应序号不存在
605  * @tc.type: FUNC
606  */
607 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_03,
608          Function | MediumTest | Level2)
609 {
610     OH_NNModel *model = OH_NNModel_Construct();
611     EXPECT_NE(nullptr, model);
612 
613     SparseToDenseModel1 sparseToDenseModel;
614     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
615     graphArgs.specifyIO = false;
616     graphArgs.build = false;
617     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
618 
619     graphArgs.inputIndices = {100000};
620     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
621     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
622     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
623 
624     Free(model, nullptr, nullptr);
625 }
626 
627 /**
628  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_04
629  * @tc.desc: 设置输入输出,inputindices中size为0
630  * @tc.type: FUNC
631  */
632 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_04,
633          Function | MediumTest | Level2)
634 {
635     OH_NNModel *model = OH_NNModel_Construct();
636     EXPECT_NE(nullptr, model);
637 
638     SparseToDenseModel1 sparseToDenseModel;
639     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
640     graphArgs.specifyIO = false;
641     graphArgs.build = false;
642     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
643 
644     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
645     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
646     inputIndices.size = 0;
647     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
648 
649     Free(model, nullptr, nullptr);
650 }
651 
652 /**
653  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_05
654  * @tc.desc: 设置输入输出,outputindices为nullptr
655  * @tc.type: FUNC
656  */
657 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_05,
658          Function | MediumTest | Level2)
659 {
660     OH_NNModel *model = OH_NNModel_Construct();
661     EXPECT_NE(nullptr, model);
662 
663     SparseToDenseModel1 sparseToDenseModel;
664     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
665     graphArgs.specifyIO = false;
666     graphArgs.build = false;
667     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
668 
669     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
670     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
671     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, nullptr));
672 
673     Free(model, nullptr, nullptr);
674 }
675 
676 /**
677  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_06
678  * @tc.desc: 设置输入输出,outputindices中data为nullptr
679  * @tc.type: FUNC
680  */
681 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_06,
682          Function | MediumTest | Level2)
683 {
684     OH_NNModel *model = OH_NNModel_Construct();
685     EXPECT_NE(nullptr, model);
686 
687     SparseToDenseModel1 sparseToDenseModel;
688     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
689     graphArgs.specifyIO = false;
690     graphArgs.build = false;
691     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
692 
693     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
694     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
695     outputIndices.data = nullptr;
696     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
697 
698     Free(model, nullptr, nullptr);
699 }
700 
701 /**
702  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_07
703  * @tc.desc: 设置输入输出,outputindices中data对应序号不存在
704  * @tc.type: FUNC
705  */
706 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_07,
707          Function | MediumTest | Level2)
708 {
709     OH_NNModel *model = OH_NNModel_Construct();
710     EXPECT_NE(nullptr, model);
711 
712     SparseToDenseModel1 sparseToDenseModel;
713     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
714     graphArgs.specifyIO = false;
715     graphArgs.build = false;
716     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
717 
718     graphArgs.outputIndices = {100000};
719     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
720     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
721     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
722 
723     Free(model, nullptr, nullptr);
724 }
725 
726 /**
727  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_08
728  * @tc.desc: 设置输入输出,outputindices中size为0
729  * @tc.type: FUNC
730  */
731 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_SpecifyInputsAndOutputs_08,
732          Function | MediumTest | Level2)
733 {
734     OH_NNModel *model = OH_NNModel_Construct();
735     EXPECT_NE(nullptr, model);
736 
737     SparseToDenseModel1 sparseToDenseModel;
738     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
739     graphArgs.specifyIO = false;
740     graphArgs.build = false;
741     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
742 
743     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
744     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
745     outputIndices.size = 0;
746     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
747 
748     Free(model, nullptr, nullptr);
749 }
750 
751 /**
752  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_01
753  * @tc.desc: 添加算子,paramindices为nullptr
754  * @tc.type: FUNC
755  */
756 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_01, Function | MediumTest | Level2)
757 {
758     OH_NNModel *model = OH_NNModel_Construct();
759     EXPECT_NE(nullptr, model);
760 
761     SparseToDenseModel1 sparseToDenseModel;
762     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
763     graphArgs.addOperation = false;
764     graphArgs.specifyIO = false;
765     graphArgs.build = false;
766     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
767 
768     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
769     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
770     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
771                                                                nullptr, &inputIndices, &outputIndices));
772 
773     Free(model, nullptr, nullptr);
774 }
775 
776 /**
777  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_02
778  * @tc.desc: 添加算子,paramindices中data为nullptr
779  * @tc.type: FUNC
780  */
781 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_02, Function | MediumTest | Level2)
782 {
783     OH_NNModel *model = OH_NNModel_Construct();
784     EXPECT_NE(nullptr, model);
785 
786     SparseToDenseModel1 sparseToDenseModel;
787     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
788     graphArgs.addOperation = false;
789     graphArgs.specifyIO = false;
790     graphArgs.build = false;
791     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
792 
793     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
794     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
795     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
796     paramIndices.data = nullptr;
797     EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddOperation(model, graphArgs.operationType,
798                                                      &paramIndices, &inputIndices, &outputIndices));
799 
800     Free(model, nullptr, nullptr);
801 }
802 
803 /**
804  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_03
805  * @tc.desc: 添加算子,paramindices中data对应序号不存在
806  * @tc.type: FUNC
807  */
808 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_03, Function | MediumTest | Level2)
809 {
810     OH_NNModel *model = OH_NNModel_Construct();
811     EXPECT_NE(nullptr, model);
812 
813     SparseToDenseModel1 sparseToDenseModel;
814     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
815     graphArgs.addOperation = false;
816     graphArgs.specifyIO = false;
817     graphArgs.build = false;
818     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
819 
820     graphArgs.paramIndices = {100000};
821     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
822     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
823     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
824     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
825                                                                &paramIndices, &inputIndices, &outputIndices));
826 
827     Free(model, nullptr, nullptr);
828 }
829 
830 /**
831  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_04
832  * @tc.desc: 添加算子,paramindices中size为0
833  * @tc.type: FUNC
834  */
835 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_04, Function | MediumTest | Level2)
836 {
837     OH_NNModel *model = OH_NNModel_Construct();
838     EXPECT_NE(nullptr, model);
839 
840     SparseToDenseModel1 sparseToDenseModel;
841     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
842     graphArgs.addOperation = false;
843     graphArgs.specifyIO = false;
844     graphArgs.build = false;
845     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
846 
847     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
848     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
849     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
850     paramIndices.size = 0;
851     EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddOperation(model, graphArgs.operationType,
852                                                      &paramIndices, &inputIndices, &outputIndices));
853 
854     Free(model, nullptr, nullptr);
855 }
856 
857 /**
858  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_05
859  * @tc.desc: 添加算子,inputindices为nullptr
860  * @tc.type: FUNC
861  */
862 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_05, Function | MediumTest | Level2)
863 {
864     OH_NNModel *model = OH_NNModel_Construct();
865     EXPECT_NE(nullptr, model);
866 
867     SparseToDenseModel1 sparseToDenseModel;
868     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
869     graphArgs.addOperation = false;
870     graphArgs.specifyIO = false;
871     graphArgs.build = false;
872     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
873 
874     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
875     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
876     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
877                                                                &paramIndices, nullptr, &outputIndices));
878 
879     Free(model, nullptr, nullptr);
880 }
881 
882 /**
883  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_06
884  * @tc.desc: 添加算子,inputindices中data为nullptr
885  * @tc.type: FUNC
886  */
887 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_06, Function | MediumTest | Level2)
888 {
889     OH_NNModel *model = OH_NNModel_Construct();
890     EXPECT_NE(nullptr, model);
891 
892     SparseToDenseModel1 sparseToDenseModel;
893     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
894     graphArgs.addOperation = false;
895     graphArgs.specifyIO = false;
896     graphArgs.build = false;
897     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
898 
899     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
900     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
901     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
902     inputIndices.data = nullptr;
903     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
904                                                                &paramIndices, &inputIndices, &outputIndices));
905 
906     Free(model, nullptr, nullptr);
907 }
908 
909 /**
910  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_07
911  * @tc.desc: 添加算子,inputindices中data对应序号不存在
912  * @tc.type: FUNC
913  */
914 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_07, Function | MediumTest | Level2)
915 {
916     OH_NNModel *model = OH_NNModel_Construct();
917     EXPECT_NE(nullptr, model);
918 
919     SparseToDenseModel1 sparseToDenseModel;
920     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
921     graphArgs.addOperation = false;
922     graphArgs.specifyIO = false;
923     graphArgs.build = false;
924     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
925 
926     graphArgs.inputIndices = {100000};
927     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
928     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
929     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
930     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
931                                                                &paramIndices, &inputIndices, &outputIndices));
932 
933     Free(model, nullptr, nullptr);
934 }
935 
936 /**
937  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_08
938  * @tc.desc: 添加算子,inputindices中size为0
939  * @tc.type: FUNC
940  */
941 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_08, Function | MediumTest | Level2)
942 {
943     OH_NNModel *model = OH_NNModel_Construct();
944     EXPECT_NE(nullptr, model);
945 
946     SparseToDenseModel1 sparseToDenseModel;
947     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
948     graphArgs.addOperation = false;
949     graphArgs.specifyIO = false;
950     graphArgs.build = false;
951     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
952 
953     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
954     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
955     auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
956     inputIndices.size = 0;
957     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
958                                                                &paramIndices, &inputIndices, &outputIndices));
959 
960     Free(model, nullptr, nullptr);
961 }
962 
963 /**
964  * @tc.number : SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_09
965  * @tc.desc: 添加算子,outputindices为nullptr
966  * @tc.type: FUNC
967  */
968 HWTEST_F(SparseToDenseTest, SUB_AI_NNRt_Func_North_SparseToDense_Model_AddOperation_09, Function | MediumTest | Level2)
969 {
970     OH_NNModel *model = OH_NNModel_Construct();
971     EXPECT_NE(nullptr, model);
972 
973     SparseToDenseModel1 sparseToDenseModel;
974     OHNNGraphArgs graphArgs = sparseToDenseModel.graphArgs;
975     graphArgs.addOperation = false;
976     graphArgs.specifyIO = false;
977     graphArgs.build = false;
978     EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
979 
980     auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
981     auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
982     EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(nullptr, graphArgs.operationType,
983                                                                &paramIndices, &inputIndices, nullptr));
984 
985     Free(model, nullptr, nullptr);
986 }