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 LSTMTest : public testing::Test {};
24
25 struct LSTMModel1 {
26 const std::vector<int32_t> input_shape = {5, 2, 10};
27 const std::vector<int32_t> wih_shape = {8, 10};
28 const std::vector<int32_t> whh_shape = {8, 2};
29 const std::vector<int32_t> bias_shape = {16};
30 const std::vector<int32_t> hx_shape = {2, 2};
31 const std::vector<int32_t> output_shape = {5, 2};
32
33 float inputValue[5][2][10] = {1};
34 float wihValue[8][10] = {1};
35 float whhValue[8][2] = {1};
36 float biasValue[16] = {1};
37 float hxValue[2][2] = {1};
38 float cxValue[2][2] = {1};
39
40 int64_t inputSizeValue[1] = {10};
41 int64_t hiddenSizeValue[1] = {2};
42 int64_t numLayersValue[1] = {1};
43
44 float outputValue[5][2] = {0};
45 float hyValue[2][2] = {0};
46 float cyValue[2][2] = {0};
47
48 OHNNOperandTest input = {OH_NN_FLOAT32, OH_NN_TENSOR, input_shape, inputValue, 100*sizeof(float)};
49 OHNNOperandTest wih = {OH_NN_FLOAT32, OH_NN_TENSOR, wih_shape, wihValue, 80*sizeof(float)};
50 OHNNOperandTest whh = {OH_NN_FLOAT32, OH_NN_TENSOR, whh_shape, whhValue, 16*sizeof(float)};
51 OHNNOperandTest bias = {OH_NN_FLOAT32, OH_NN_TENSOR, bias_shape, biasValue, 16*sizeof(float)};
52 OHNNOperandTest hx = {OH_NN_FLOAT32, OH_NN_TENSOR, hx_shape, hxValue, 4*sizeof(float)};
53 OHNNOperandTest cx = {OH_NN_FLOAT32, OH_NN_TENSOR, hx_shape, cxValue, 4*sizeof(float)};
54
55 OHNNOperandTest output = {OH_NN_FLOAT32, OH_NN_TENSOR, output_shape, outputValue, 10*sizeof(float)};
56 OHNNOperandTest hy = {OH_NN_FLOAT32, OH_NN_TENSOR, hx_shape, hyValue, 4*sizeof(float)};
57 OHNNOperandTest cy = {OH_NN_FLOAT32, OH_NN_TENSOR, hx_shape, cyValue, 4*sizeof(float)};
58
59 OHNNOperandTest inputSize = {OH_NN_INT64, OH_NN_LSTM_INPUT_SIZE, {1}, inputSizeValue, sizeof(int64_t)};
60 OHNNOperandTest hiddenSize = {OH_NN_INT64, OH_NN_LSTM_HIDDEN_SIZE, {1}, hiddenSizeValue, sizeof(int64_t)};
61 OHNNOperandTest numLayers = {OH_NN_INT64, OH_NN_LSTM_NUM_LAYERS, {1}, numLayersValue, sizeof(int64_t)};
62 OHNNGraphArgs graphArgs = {.operationType = OH_NN_OPS_LSTM,
63 .operands = {input, wih, whh, bias, hx, cx, output, hy,
64 cy, inputSize, hiddenSize, numLayers},
65 .paramIndices = {9, 10, 11},
66 .inputIndices = {0, 1, 2, 3, 4, 5},
67 .outputIndices = {6, 7, 8}};
68 };
69
70 /**
71 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Build_01
72 * @tc.desc: LSTMModel1模型build测试
73 * @tc.type: FUNC
74 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_01, Function | MediumTest | Level1)75 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_01, Function | MediumTest | Level1)
76 {
77 OH_NNModel *model = OH_NNModel_Construct();
78 EXPECT_NE(nullptr, model);
79
80 LSTMModel1 lSTMModel;
81 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
82 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
83
84 OH_NNCompilation *compilation = OH_NNCompilation_Construct(model);
85 EXPECT_NE(nullptr, compilation);
86
87 OHNNCompileParam compileParam{
88 .performanceMode = OH_NN_PERFORMANCE_HIGH,
89 .priority = OH_NN_PRIORITY_HIGH,
90 };
91 EXPECT_EQ(OH_NN_SUCCESS, CompileGraphMock(compilation, compileParam));
92
93 OH_NNExecutor *executor = OH_NNExecutor_Construct(compilation);
94 EXPECT_NE(nullptr, executor);
95
96 Free(model, compilation, executor);
97 }
98
99 /**
100 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Build_02
101 * @tc.desc: LSTMModel1模型输入Tensor+1进行build测试
102 * @tc.type: FUNC
103 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_02, Function | MediumTest | Level2)104 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_02, Function | MediumTest | Level2)
105 {
106 OH_NNModel *model = OH_NNModel_Construct();
107 EXPECT_NE(nullptr, model);
108
109 LSTMModel1 lSTMModel;
110 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
111 graphArgs.operands = {lSTMModel.input, lSTMModel.input, lSTMModel.wih, lSTMModel.whh, lSTMModel.bias, lSTMModel.hx,
112 lSTMModel.cx, lSTMModel.output, lSTMModel.hy, lSTMModel.cy, lSTMModel.inputSize,
113 lSTMModel.hiddenSize, lSTMModel.numLayers};
114 graphArgs.inputIndices = {0, 1, 2, 3, 4, 5, 6};
115 graphArgs.outputIndices = {7, 8, 9};
116 graphArgs.paramIndices = {10, 11, 12};
117 EXPECT_EQ(OH_NN_INVALID_PARAMETER, BuildSingleOpGraph(model, graphArgs));
118
119 Free(model, nullptr, nullptr);
120 }
121
122 /**
123 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Build_03
124 * @tc.desc: LSTMModel1模型输出Tensor+1进行build测试
125 * @tc.type: FUNC
126 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_03, Function | MediumTest | Level2)127 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_03, Function | MediumTest | Level2)
128 {
129 OH_NNModel *model = OH_NNModel_Construct();
130 EXPECT_NE(nullptr, model);
131
132 LSTMModel1 lSTMModel;
133 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
134 graphArgs.operands = {lSTMModel.input, lSTMModel.wih, lSTMModel.whh, lSTMModel.bias, lSTMModel.hx, lSTMModel.cx,
135 lSTMModel.output, lSTMModel.output, lSTMModel.hy, lSTMModel.cy, lSTMModel.inputSize,
136 lSTMModel.hiddenSize, lSTMModel.numLayers};
137 graphArgs.inputIndices = {0, 1, 2, 3, 4, 5};
138 graphArgs.outputIndices = {6, 7, 8, 9};
139 graphArgs.paramIndices = {10, 11, 12};
140 EXPECT_EQ(OH_NN_INVALID_PARAMETER, BuildSingleOpGraph(model, graphArgs));
141
142 Free(model, nullptr, nullptr);
143 }
144
145 /**
146 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Build_04
147 * @tc.desc: LSTMModel1模型传入非法参数进行build测试
148 * @tc.type: FUNC
149 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_04, Function | MediumTest | Level2)150 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Build_04, Function | MediumTest | Level2)
151 {
152 OH_NNModel *model = OH_NNModel_Construct();
153 EXPECT_NE(nullptr, model);
154
155 LSTMModel1 lSTMModel;
156 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
157
158 int8_t activationValue = OH_NN_FUSED_NONE;
159 OHNNOperandTest activation = {OH_NN_INT8, OH_NN_ADD_ACTIVATIONTYPE, {}, &activationValue, sizeof(int8_t)};
160 graphArgs.operands = {lSTMModel.input, lSTMModel.wih, lSTMModel.whh, lSTMModel.bias, lSTMModel.hx,
161 lSTMModel.cx, lSTMModel.output, lSTMModel.hy, lSTMModel.cy, lSTMModel.inputSize,
162 lSTMModel.hiddenSize, lSTMModel.numLayers, activation};
163 graphArgs.paramIndices = {9, 10, 11, 12};
164 EXPECT_EQ(OH_NN_INVALID_PARAMETER, BuildSingleOpGraph(model, graphArgs));
165
166 Free(model, nullptr, nullptr);
167 }
168
169 /**
170 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_Finish_01
171 * @tc.desc: 模型构图,未添加操作数
172 * @tc.type: FUNC
173 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_Finish_01, Function | MediumTest | Level2)174 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_Finish_01, Function | MediumTest | Level2)
175 {
176 OH_NNModel *model = OH_NNModel_Construct();
177 EXPECT_NE(nullptr, model);
178
179 OHNNGraphArgs graphArgs;
180 EXPECT_EQ(OH_NN_INVALID_PARAMETER, SingleModelBuildEndStep(model, graphArgs));
181
182 Free(model, nullptr, nullptr);
183 }
184
185 /**
186 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_Finish_02
187 * @tc.desc: 模型构图,未设置输入输出
188 * @tc.type: FUNC
189 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_Finish_02, Function | MediumTest | Level2)190 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_Finish_02, Function | MediumTest | Level2)
191 {
192 OH_NNModel *model = OH_NNModel_Construct();
193 EXPECT_NE(nullptr, model);
194
195 LSTMModel1 lSTMModel;
196 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
197 graphArgs.specifyIO = false;
198 EXPECT_EQ(OH_NN_OPERATION_FORBIDDEN, BuildSingleOpGraph(model, graphArgs));
199
200 Free(model, nullptr, nullptr);
201 }
202
203 /**
204 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_Finish_03
205 * @tc.desc: 模型构图,设置输入输出,构图成功
206 * @tc.type: FUNC
207 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_Finish_03, Function | MediumTest | Level1)208 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_Finish_03, Function | MediumTest | Level1)
209 {
210 OH_NNModel *model = OH_NNModel_Construct();
211 EXPECT_NE(nullptr, model);
212
213 LSTMModel1 lSTMModel;
214 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
215 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
216
217 Free(model, nullptr, nullptr);
218 }
219
220 /**
221 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_01
222 * @tc.desc: 设置操作数值,操作数不存在
223 * @tc.type: FUNC
224 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_01, Function | MediumTest | Level2)225 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_01, Function | MediumTest | Level2)
226 {
227 OH_NNModel *model = OH_NNModel_Construct();
228 EXPECT_NE(nullptr, model);
229
230 LSTMModel1 lSTMModel;
231 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
232
233 NN_TensorDesc* tensorDesc = nullptr;
234 std::vector<NN_TensorDesc*> tensorDescVec;
235
236 for (size_t i = 0; i < graphArgs.operands.size(); i++) {
237 const OHNNOperandTest &operandTem = graphArgs.operands[i];
238 tensorDesc = createTensorDesc(operandTem.shape.data(),
239 (uint32_t) operandTem.shape.size(),
240 operandTem.dataType, operandTem.format);
241 tensorDescVec.emplace_back(tensorDesc);
242 EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
243 EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, i, operandTem.type));
244
245 if (std::find(graphArgs.paramIndices.begin(), graphArgs.paramIndices.end(), i) !=
246 graphArgs.paramIndices.end()) {
247 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(
248 model, 1000+i, operandTem.data, operandTem.length));
249 }
250 }
251
252 FreeTensorDescVec(tensorDescVec);
253 Free(model, nullptr, nullptr);
254 }
255
256 /**
257 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_02
258 * @tc.desc: 设置操作数值,buufer为nullptr
259 * @tc.type: FUNC
260 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_02, Function | MediumTest | Level2)261 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_02, Function | MediumTest | Level2)
262 {
263 OH_NNModel *model = OH_NNModel_Construct();
264 EXPECT_NE(nullptr, model);
265
266 LSTMModel1 lSTMModel;
267 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
268
269 NN_TensorDesc* tensorDesc = nullptr;
270 std::vector<NN_TensorDesc*> tensorDescVec;
271
272 for (size_t i = 0; i < graphArgs.operands.size(); i++) {
273 const OHNNOperandTest &operandTem = graphArgs.operands[i];
274 tensorDesc = createTensorDesc(operandTem.shape.data(),
275 (uint32_t) operandTem.shape.size(),
276 operandTem.dataType, operandTem.format);
277 tensorDescVec.emplace_back(tensorDesc);
278 EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
279 EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, i, operandTem.type));
280
281 if (std::find(graphArgs.paramIndices.begin(), graphArgs.paramIndices.end(), i) !=
282 graphArgs.paramIndices.end()) {
283 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, i, nullptr, operandTem.length));
284 }
285 }
286
287 FreeTensorDescVec(tensorDescVec);
288 Free(model, nullptr, nullptr);
289 }
290
291 /**
292 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_03
293 * @tc.desc: 设置操作数值,length为0
294 * @tc.type: FUNC
295 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_03, Function | MediumTest | Level2)296 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SetOperandValue_03, Function | MediumTest | Level2)
297 {
298 OH_NNModel *model = OH_NNModel_Construct();
299 EXPECT_NE(nullptr, model);
300
301 LSTMModel1 lSTMModel;
302 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
303
304 NN_TensorDesc* tensorDesc = nullptr;
305 std::vector<NN_TensorDesc*> tensorDescVec;
306
307 for (size_t i = 0; i < graphArgs.operands.size(); i++) {
308 const OHNNOperandTest &operandTem = graphArgs.operands[i];
309 tensorDesc = createTensorDesc(operandTem.shape.data(),
310 (uint32_t) operandTem.shape.size(),
311 operandTem.dataType, operandTem.format);
312 tensorDescVec.emplace_back(tensorDesc);
313 EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
314 EXPECT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, i, operandTem.type));
315
316 if (std::find(graphArgs.paramIndices.begin(), graphArgs.paramIndices.end(), i) !=
317 graphArgs.paramIndices.end()) {
318 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, 1000+i, operandTem.data, 0));
319 }
320 }
321
322 FreeTensorDescVec(tensorDescVec);
323 Free(model, nullptr, nullptr);
324 }
325
326 /**
327 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_01
328 * @tc.desc: 设置输入输出,inputIndices为nullptr
329 * @tc.type: FUNC
330 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_01, Function | MediumTest | Level2)331 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_01, Function | MediumTest | Level2)
332 {
333 OH_NNModel *model = OH_NNModel_Construct();
334 EXPECT_NE(nullptr, model);
335
336 LSTMModel1 lSTMModel;
337 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
338 graphArgs.specifyIO = false;
339 graphArgs.build = false;
340 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
341
342 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
343 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
344 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, nullptr, &outputIndices));
345
346 Free(model, nullptr, nullptr);
347 }
348
349 /**
350 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_02
351 * @tc.desc: 设置输入输出,inputindices中data为nullptr
352 * @tc.type: FUNC
353 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_02, Function | MediumTest | Level2)354 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_02, Function | MediumTest | Level2)
355 {
356 OH_NNModel *model = OH_NNModel_Construct();
357 EXPECT_NE(nullptr, model);
358
359 LSTMModel1 lSTMModel;
360 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
361 graphArgs.specifyIO = false;
362 graphArgs.build = false;
363 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
364
365 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
366 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
367 inputIndices.data = nullptr;
368 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
369
370 Free(model, nullptr, nullptr);
371 }
372
373 /**
374 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_03
375 * @tc.desc: 设置输入输出,inputindices中data对应序号不存在
376 * @tc.type: FUNC
377 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_03, Function | MediumTest | Level2)378 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_03, Function | MediumTest | Level2)
379 {
380 OH_NNModel *model = OH_NNModel_Construct();
381 EXPECT_NE(nullptr, model);
382
383 LSTMModel1 lSTMModel;
384 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
385 graphArgs.specifyIO = false;
386 graphArgs.build = false;
387 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
388
389 graphArgs.inputIndices = {100000};
390 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
391 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
392 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
393
394 Free(model, nullptr, nullptr);
395 }
396
397 /**
398 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_04
399 * @tc.desc: 设置输入输出,inputindices中size为0
400 * @tc.type: FUNC
401 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_04, Function | MediumTest | Level2)402 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_04, Function | MediumTest | Level2)
403 {
404 OH_NNModel *model = OH_NNModel_Construct();
405 EXPECT_NE(nullptr, model);
406
407 LSTMModel1 lSTMModel;
408 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
409 graphArgs.specifyIO = false;
410 graphArgs.build = false;
411 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
412
413 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
414 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
415 inputIndices.size = 0;
416 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
417
418 Free(model, nullptr, nullptr);
419 }
420
421 /**
422 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_05
423 * @tc.desc: 设置输入输出,outputindices为nullptr
424 * @tc.type: FUNC
425 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_05, Function | MediumTest | Level2)426 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_05, Function | MediumTest | Level2)
427 {
428 OH_NNModel *model = OH_NNModel_Construct();
429 EXPECT_NE(nullptr, model);
430
431 LSTMModel1 lSTMModel;
432 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
433 graphArgs.specifyIO = false;
434 graphArgs.build = false;
435 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
436
437 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
438 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
439 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, nullptr));
440
441 Free(model, nullptr, nullptr);
442 }
443
444 /**
445 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_06
446 * @tc.desc: 设置输入输出,outputindices中data为nullptr
447 * @tc.type: FUNC
448 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_06, Function | MediumTest | Level2)449 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_06, Function | MediumTest | Level2)
450 {
451 OH_NNModel *model = OH_NNModel_Construct();
452 EXPECT_NE(nullptr, model);
453
454 LSTMModel1 lSTMModel;
455 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
456 graphArgs.specifyIO = false;
457 graphArgs.build = false;
458 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
459
460 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
461 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
462 outputIndices.data = nullptr;
463 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
464
465 Free(model, nullptr, nullptr);
466 }
467
468 /**
469 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_07
470 * @tc.desc: 设置输入输出,outputindices中data对应序号不存在
471 * @tc.type: FUNC
472 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_07, Function | MediumTest | Level2)473 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_07, Function | MediumTest | Level2)
474 {
475 OH_NNModel *model = OH_NNModel_Construct();
476 EXPECT_NE(nullptr, model);
477
478 LSTMModel1 lSTMModel;
479 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
480 graphArgs.specifyIO = false;
481 graphArgs.build = false;
482 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
483
484 graphArgs.outputIndices = {100000};
485 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
486 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
487 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
488
489 Free(model, nullptr, nullptr);
490 }
491
492 /**
493 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_08
494 * @tc.desc: 设置输入输出,outputindices中size为0
495 * @tc.type: FUNC
496 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_08, Function | MediumTest | Level2)497 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_SpecifyInputsAndOutputs_08, Function | MediumTest | Level2)
498 {
499 OH_NNModel *model = OH_NNModel_Construct();
500 EXPECT_NE(nullptr, model);
501
502 LSTMModel1 lSTMModel;
503 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
504 graphArgs.specifyIO = false;
505 graphArgs.build = false;
506 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
507
508 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
509 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
510 outputIndices.size = 0;
511 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SpecifyInputsAndOutputs(model, &inputIndices, &outputIndices));
512
513 Free(model, nullptr, nullptr);
514 }
515
516 /**
517 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_01
518 * @tc.desc: 添加算子,paramindices为nullptr
519 * @tc.type: FUNC
520 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_01, Function | MediumTest | Level2)521 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_01, Function | MediumTest | Level2)
522 {
523 OH_NNModel *model = OH_NNModel_Construct();
524 EXPECT_NE(nullptr, model);
525
526 LSTMModel1 lSTMModel;
527 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
528 graphArgs.addOperation = false;
529 graphArgs.specifyIO = false;
530 graphArgs.build = false;
531 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
532
533 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
534 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
535 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
536 nullptr, &inputIndices, &outputIndices));
537
538 Free(model, nullptr, nullptr);
539 }
540
541 /**
542 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_02
543 * @tc.desc: 添加算子,paramindices中data为nullptr
544 * @tc.type: FUNC
545 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_02, Function | MediumTest | Level2)546 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_02, Function | MediumTest | Level2)
547 {
548 OH_NNModel *model = OH_NNModel_Construct();
549 EXPECT_NE(nullptr, model);
550
551 LSTMModel1 lSTMModel;
552 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
553 graphArgs.addOperation = false;
554 graphArgs.specifyIO = false;
555 graphArgs.build = false;
556 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
557
558 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
559 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
560 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
561 paramIndices.data = nullptr;
562 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
563 ¶mIndices, &inputIndices, &outputIndices));
564
565 Free(model, nullptr, nullptr);
566 }
567
568 /**
569 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_03
570 * @tc.desc: 添加算子,paramindices中data对应序号不存在
571 * @tc.type: FUNC
572 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_03, Function | MediumTest | Level2)573 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_03, Function | MediumTest | Level2)
574 {
575 OH_NNModel *model = OH_NNModel_Construct();
576 EXPECT_NE(nullptr, model);
577
578 LSTMModel1 lSTMModel;
579 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
580 graphArgs.addOperation = false;
581 graphArgs.specifyIO = false;
582 graphArgs.build = false;
583 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
584
585 graphArgs.paramIndices = {100000};
586 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
587 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
588 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
589 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
590 ¶mIndices, &inputIndices, &outputIndices));
591
592 Free(model, nullptr, nullptr);
593 }
594
595 /**
596 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_04
597 * @tc.desc: 添加算子,paramindices中size为0
598 * @tc.type: FUNC
599 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_04, Function | MediumTest | Level2)600 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_04, Function | MediumTest | Level2)
601 {
602 OH_NNModel *model = OH_NNModel_Construct();
603 EXPECT_NE(nullptr, model);
604
605 LSTMModel1 lSTMModel;
606 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
607 graphArgs.addOperation = false;
608 graphArgs.specifyIO = false;
609 graphArgs.build = false;
610 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
611
612 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
613 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
614 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
615 paramIndices.size = 0;
616 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
617 ¶mIndices, &inputIndices, &outputIndices));
618
619 Free(model, nullptr, nullptr);
620 }
621
622 /**
623 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_05
624 * @tc.desc: 添加算子,inputindices为nullptr
625 * @tc.type: FUNC
626 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_05, Function | MediumTest | Level2)627 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_05, Function | MediumTest | Level2)
628 {
629 OH_NNModel *model = OH_NNModel_Construct();
630 EXPECT_NE(nullptr, model);
631
632 LSTMModel1 lSTMModel;
633 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
634 graphArgs.addOperation = false;
635 graphArgs.specifyIO = false;
636 graphArgs.build = false;
637 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
638
639 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
640 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
641 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
642 ¶mIndices, nullptr, &outputIndices));
643
644 Free(model, nullptr, nullptr);
645 }
646
647 /**
648 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_06
649 * @tc.desc: 添加算子,inputindices中data为nullptr
650 * @tc.type: FUNC
651 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_06, Function | MediumTest | Level2)652 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_06, Function | MediumTest | Level2)
653 {
654 OH_NNModel *model = OH_NNModel_Construct();
655 EXPECT_NE(nullptr, model);
656
657 LSTMModel1 lSTMModel;
658 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
659 graphArgs.addOperation = false;
660 graphArgs.specifyIO = false;
661 graphArgs.build = false;
662 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
663
664 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
665 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
666 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
667 inputIndices.data = nullptr;
668 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
669 ¶mIndices, &inputIndices, &outputIndices));
670
671 Free(model, nullptr, nullptr);
672 }
673
674 /**
675 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_07
676 * @tc.desc: 添加算子,inputindices中data对应序号不存在
677 * @tc.type: FUNC
678 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_07, Function | MediumTest | Level2)679 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_07, Function | MediumTest | Level2)
680 {
681 OH_NNModel *model = OH_NNModel_Construct();
682 EXPECT_NE(nullptr, model);
683
684 LSTMModel1 lSTMModel;
685 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
686 graphArgs.addOperation = false;
687 graphArgs.specifyIO = false;
688 graphArgs.build = false;
689 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
690
691 graphArgs.inputIndices = {100000};
692 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
693 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
694 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
695 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
696 ¶mIndices, &inputIndices, &outputIndices));
697
698 Free(model, nullptr, nullptr);
699 }
700
701 /**
702 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_08
703 * @tc.desc: 添加算子,inputindices中size为0
704 * @tc.type: FUNC
705 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_08, Function | MediumTest | Level2)706 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_08, Function | MediumTest | Level2)
707 {
708 OH_NNModel *model = OH_NNModel_Construct();
709 EXPECT_NE(nullptr, model);
710
711 LSTMModel1 lSTMModel;
712 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
713 graphArgs.addOperation = false;
714 graphArgs.specifyIO = false;
715 graphArgs.build = false;
716 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
717
718 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
719 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
720 auto outputIndices = TransformUInt32Array(graphArgs.outputIndices);
721 inputIndices.size = 0;
722 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(model, graphArgs.operationType,
723 ¶mIndices, &inputIndices, &outputIndices));
724
725 Free(model, nullptr, nullptr);
726 }
727
728 /**
729 * @tc.number : SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_09
730 * @tc.desc: 添加算子,outputindices为nullptr
731 * @tc.type: FUNC
732 */
HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_09, Function | MediumTest | Level2)733 HWTEST_F(LSTMTest, SUB_AI_NNRt_Func_North_LSTM_Model_AddOperation_09, Function | MediumTest | Level2)
734 {
735 OH_NNModel *model = OH_NNModel_Construct();
736 EXPECT_NE(nullptr, model);
737
738 LSTMModel1 lSTMModel;
739 OHNNGraphArgs graphArgs = lSTMModel.graphArgs;
740 graphArgs.addOperation = false;
741 graphArgs.specifyIO = false;
742 graphArgs.build = false;
743 EXPECT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
744
745 auto paramIndices = TransformUInt32Array(graphArgs.paramIndices);
746 auto inputIndices = TransformUInt32Array(graphArgs.inputIndices);
747 EXPECT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddOperation(nullptr, graphArgs.operationType,
748 ¶mIndices, &inputIndices, nullptr));
749
750 Free(model, nullptr, nullptr);
751 }