1 /*
2  * Copyright (c) 2023 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 #include <cmath>
16 #include <cstdio>
17 #include <vector>
18 #include <thread>
19 
20 #include "nncore_utils.h"
21 
22 using namespace testing::ext;
23 using namespace OHOS::NeuralNetworkRuntime::Test;
24 using namespace OHOS::HDI::Nnrt::V2_0;
25 
26 namespace {
27 
28 class ModelTest : public testing::Test {
29 protected:
30     AddModel addModel;
31     OHNNGraphArgs graphArgs = addModel.graphArgs;
32 };
33 
BuildAddTopKGraph(OH_NNModel *model)34 void BuildAddTopKGraph(OH_NNModel *model)
35 {
36     AddTopKModel addTopKModel;
37     OHNNGraphArgsMulti graphArgsMulti = addTopKModel.graphArgs;
38     ASSERT_EQ(OH_NN_SUCCESS, BuildMultiOpGraph(model, graphArgsMulti));
39 }
40 
BuildModel(OH_NNModel *model, const OHNNGraphArgs &graphArgs)41 void BuildModel(OH_NNModel *model, const OHNNGraphArgs &graphArgs)
42 {
43     ASSERT_EQ(OH_NN_SUCCESS, BuildSingleOpGraph(model, graphArgs));
44 }
45 
46 } // namespace
47 
48 /**
49  * @tc.number : SUB_AI_NNRt_Func_North_Model_CreateQuantParam_0100
50  * @tc.desc: 创建量化参数
51  * @tc.type: FUNC
52  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_CreateQuantParam_0100, Function | MediumTest | Level0)53 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_CreateQuantParam_0100, Function | MediumTest | Level0)
54 {
55     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
56     ASSERT_NE(nullptr, quantParam);
57     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
58 }
59 
60 /**
61  * @tc.number : SUB_AI_NNRt_Func_North_Model_DestroyQuantParam_0100
62  * @tc.desc: 释放量化参数,*quantParam为空
63  * @tc.type: FUNC
64  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_DestroyQuantParam_0100, Function | MediumTest | Level0)65 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_DestroyQuantParam_0100, Function | MediumTest | Level0)
66 {
67     NN_QuantParam* quantParam = nullptr;
68     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNQuantParam_Destroy(&quantParam));
69 }
70 
71 /**
72  * @tc.number : SUB_AI_NNRt_Func_North_Model_DestroyQuantParam_0200
73  * @tc.desc: 释放量化参数,quantParam为空
74  * @tc.type: FUNC
75  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_DestroyQuantParam_0200, Function | MediumTest | Level0)76 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_DestroyQuantParam_0200, Function | MediumTest | Level0)
77 {
78     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNQuantParam_Destroy(nullptr));
79 }
80 
81 /**
82  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0100
83  * @tc.desc: 设置量化参数,参数为空,返回失败
84  * @tc.type: FUNC
85  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0100, Function | MediumTest | Level0)86 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0100, Function | MediumTest | Level0)
87 {
88     double scales = 0.2;
89     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNQuantParam_SetScales(nullptr, &scales, 1));
90 }
91 
92 /**
93  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0200
94  * @tc.desc: 设置量化参数,参数合法,count=1,参数的channel=1,调用成功
95  * @tc.type: FUNC
96  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0200, Function | MediumTest | Level0)97 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0200, Function | MediumTest | Level0)
98 {
99     OH_NNModel *model = OH_NNModel_Construct();
100     ASSERT_NE(nullptr, model);
101     int32_t inputDims[4] = {1, 1, 2, 3};
102     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
103     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
104     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
105     double scales = 0.2;
106     int32_t zeroPoints = 0;
107     uint32_t numBits = 8;
108     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 1));
109     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 1));
110     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 1));
111     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
112     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
113     OH_NNModel_Destroy(&model);
114     OH_NNTensorDesc_Destroy(&tensorDesc);
115 }
116 
117 /**
118  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0300
119  * @tc.desc: 设置量化参数,count=1,channel=2,Per-Layer模式,设置成功
120  * @tc.type: FUNC
121  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0300, Function | MediumTest | Level0)122 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0300, Function | MediumTest | Level0)
123 {
124     OH_NNModel *model = OH_NNModel_Construct();
125     ASSERT_NE(nullptr, model);
126     int32_t inputDims[4] = {1, 2, 2, 3};
127     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
128     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
129     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
130     double scales = 0.2;
131     int32_t zeroPoints = 0;
132     uint32_t numBits = 8;
133     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 1));
134     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 1));
135     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 1));
136     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
137     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
138     OH_NNModel_Destroy(&model);
139     OH_NNTensorDesc_Destroy(&tensorDesc);
140 }
141 
142 /**
143  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0400
144  * @tc.desc: 设置量化参数,参数合法,count=2,参数的channel=1,调用失败
145  * @tc.type: FUNC
146  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0400, Function | MediumTest | Level0)147 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0400, Function | MediumTest | Level0)
148 {
149     OH_NNModel *model = OH_NNModel_Construct();
150     ASSERT_NE(nullptr, model);
151     int32_t inputDims[4] = {1, 1, 2, 3};
152     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
153     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
154     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
155     double scales = 0.2;
156     int32_t zeroPoints = 0;
157     uint32_t numBits = 8;
158     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 2));
159     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 2));
160     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 2));
161     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
162     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
163     OH_NNModel_Destroy(&model);
164     OH_NNTensorDesc_Destroy(&tensorDesc);
165 }
166 
167 /**
168  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0500
169  * @tc.desc: 设置量化参数,参数合法,参数count不一致,调用失败
170  * @tc.type: FUNC
171  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0500, Function | MediumTest | Level0)172 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0500, Function | MediumTest | Level0)
173 {
174     OH_NNModel *model = OH_NNModel_Construct();
175     ASSERT_NE(nullptr, model);
176     int32_t inputDims[4] = {1, 1, 2, 3};
177     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
178     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
179     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
180     double scales = 0.2;
181     int32_t zeroPoints = 0;
182     uint32_t numBits = 8;
183     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 1));
184     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 2));
185     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 1));
186     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
187     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
188     OH_NNModel_Destroy(&model);
189     OH_NNTensorDesc_Destroy(&tensorDesc);
190 }
191 
192 /**
193  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0600
194  * @tc.desc: 设置量化参数,参数合法,不设置zeroPoints,调用失败
195  * @tc.type: FUNC
196  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0600, Function | MediumTest | Level0)197 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0600, Function | MediumTest | Level0)
198 {
199     OH_NNModel *model = OH_NNModel_Construct();
200     ASSERT_NE(nullptr, model);
201     int32_t inputDims[4] = {1, 1, 2, 3};
202     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
203     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
204     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
205     double scales = 0.2;
206     uint32_t numBits = 8;
207     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 1));
208     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 1));
209     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
210     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
211     OH_NNModel_Destroy(&model);
212     OH_NNTensorDesc_Destroy(&tensorDesc);
213 }
214 
215 /**
216  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0700
217  * @tc.desc: 设置量化参数,参数合法,不设置numBits,调用失败
218  * @tc.type: FUNC
219  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0700, Function | MediumTest | Level0)220 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0700, Function | MediumTest | Level0)
221 {
222     OH_NNModel *model = OH_NNModel_Construct();
223     ASSERT_NE(nullptr, model);
224     int32_t inputDims[4] = {1, 1, 2, 3};
225     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
226     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
227     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
228     double scales = 0.2;
229     int32_t zeroPoints = 0;
230     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 1));
231     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 1));
232     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
233     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
234     OH_NNModel_Destroy(&model);
235     OH_NNTensorDesc_Destroy(&tensorDesc);
236 }
237 
238 /**
239  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0800
240  * @tc.desc: 设置量化参数,参数合法,不设置scales,调用失败
241  * @tc.type: FUNC
242  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0800, Function | MediumTest | Level0)243 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0800, Function | MediumTest | Level0)
244 {
245     OH_NNModel *model = OH_NNModel_Construct();
246     ASSERT_NE(nullptr, model);
247     int32_t inputDims[4] = {1, 1, 2, 3};
248     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
249     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
250     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
251     int32_t zeroPoints = 0;
252     uint32_t numBits = 8;
253     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 1));
254     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 1));
255     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorQuantParams(model, 0, quantParam));
256     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
257     OH_NNModel_Destroy(&model);
258     OH_NNTensorDesc_Destroy(&tensorDesc);
259 }
260 
261 /**
262  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetQuantParam_0900
263  * @tc.desc: 设置量化参数,参数合法,tensor下标等于当前tensor个数,返回失败
264  * @tc.type: FUNC
265  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0900, Function | MediumTest | Level0)266 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetQuantParam_0900, Function | MediumTest | Level0)
267 {
268     OH_NNModel *model = OH_NNModel_Construct();
269     ASSERT_NE(nullptr, model);
270     int32_t inputDims[4] = {1, 1, 2, 3};
271     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
272     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
273     NN_QuantParam* quantParam = OH_NNQuantParam_Create();
274     double scales = 0.2;
275     int32_t zeroPoints = 0;
276     uint32_t numBits = 8;
277     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetScales(quantParam, &scales, 1));
278     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetZeroPoints(quantParam, &zeroPoints, 1));
279     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_SetNumBits(quantParam, &numBits, 1));
280     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorQuantParams(model, 1, quantParam));
281     ASSERT_EQ(OH_NN_SUCCESS, OH_NNQuantParam_Destroy(&quantParam));
282     OH_NNModel_Destroy(&model);
283     OH_NNTensorDesc_Destroy(&tensorDesc);
284 }
285 
286 /**
287  * @tc.number : SUB_AI_NNRt_Func_North_Model_AddTensorToModel_0100
288  * @tc.desc: 添加tensor到模型,model为空
289  * @tc.type: FUNC
290  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_AddTensorToModel_0100, Function | MediumTest | Level0)291 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_AddTensorToModel_0100, Function | MediumTest | Level0)
292 {
293     int32_t inputDims[4] = {1, 1, 2, 3};
294     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
295     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddTensorToModel(nullptr, tensorDesc));
296     OH_NNTensorDesc_Destroy(&tensorDesc);
297 }
298 
299 /**
300  * @tc.number : SUB_AI_NNRt_Func_North_Model_AddTensorToModel_0200
301  * @tc.desc: 添加tensor到模型,tensorDesc为空
302  * @tc.type: FUNC
303  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_AddTensorToModel_0200, Function | MediumTest | Level0)304 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_AddTensorToModel_0200, Function | MediumTest | Level0)
305 {
306     OH_NNModel *model = OH_NNModel_Construct();
307     ASSERT_NE(nullptr, model);
308     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_AddTensorToModel(model, nullptr));
309     OH_NNModel_Destroy(&model);
310 }
311 
312 /**
313  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorData_0100
314  * @tc.desc: 设置操作数值,model为nullptr
315  * @tc.type: FUNC
316  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0100, Function | MediumTest | Level0)317 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0100, Function | MediumTest | Level0)
318 {
319     int8_t activationValue{0};
320     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(nullptr, 0, (void *)&activationValue, sizeof(int8_t)));
321 }
322 
323 /**
324  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorData_0200
325  * @tc.desc: 设置操作数值,databuffer为nullptr
326  * @tc.type: FUNC
327  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0200, Function | MediumTest | Level0)328 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0200, Function | MediumTest | Level0)
329 {
330     OH_NNModel *model = OH_NNModel_Construct();
331     ASSERT_NE(nullptr, model);
332     int32_t inputDims[4] = {1, 1, 2, 3};
333     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
334     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
335     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, 0, nullptr, sizeof(int8_t)));
336     OH_NNModel_Destroy(&model);
337     OH_NNTensorDesc_Destroy(&tensorDesc);
338 }
339 
340 /**
341  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorData_0300
342  * @tc.desc: 设置操作数值,length = 0
343  * @tc.type: FUNC
344  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0300, Function | MediumTest | Level0)345 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0300, Function | MediumTest | Level0)
346 {
347     OH_NNModel *model = OH_NNModel_Construct();
348     ASSERT_NE(nullptr, model);
349     int32_t inputDims[4] = {1, 1, 2, 3};
350     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
351     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
352     int8_t activationValue{0};
353     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, 0, (void *)&activationValue, 0));
354     OH_NNModel_Destroy(&model);
355     OH_NNTensorDesc_Destroy(&tensorDesc);
356 }
357 
358 /**
359  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorData_0400
360  * @tc.desc: 设置操作数值,index大于tensor个数
361  * @tc.type: FUNC
362  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0400, Function | MediumTest | Level0)363 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorData_0400, Function | MediumTest | Level0)
364 {
365     OH_NNModel *model = OH_NNModel_Construct();
366     ASSERT_NE(nullptr, model);
367     int32_t inputDims[4] = {1, 1, 2, 3};
368     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
369     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
370     int8_t activationValue{0};
371     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorData(model, 1000, (void *)&activationValue, sizeof(int8_t)));
372     OH_NNModel_Destroy(&model);
373     OH_NNTensorDesc_Destroy(&tensorDesc);
374 }
375 
376 /**
377  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorType_0100
378  * @tc.desc: 设置tensortype,model为nullptr
379  * @tc.type: FUNC
380  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorType_0100, Function | MediumTest | Level0)381 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorType_0100, Function | MediumTest | Level0)
382 {
383     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorType(nullptr, 0, OH_NN_TENSOR));
384 }
385 
386 /**
387  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorType_0200
388  * @tc.desc: 设置tensortype,index大于tensor个数
389  * @tc.type: FUNC
390  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorType_0200, Function | MediumTest | Level0)391 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorType_0200, Function | MediumTest | Level0)
392 {
393     OH_NNModel *model = OH_NNModel_Construct();
394     ASSERT_NE(nullptr, model);
395     int32_t inputDims[4] = {1, 1, 2, 3};
396     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
397     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
398     ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNModel_SetTensorType(model, 1000, OH_NN_TENSOR));
399     OH_NNModel_Destroy(&model);
400     OH_NNTensorDesc_Destroy(&tensorDesc);
401 }
402 
403 /**
404  * @tc.number : SUB_AI_NNRt_Func_North_Model_SetTensorType_0300
405  * @tc.desc: 设置tensortype,遍历设置tensorType
406  * @tc.type: FUNC
407  */
HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorType_0300, Function | MediumTest | Level0)408 HWTEST_F(ModelTest, SUB_AI_NNRt_Func_North_Model_SetTensorType_0300, Function | MediumTest | Level0)
409 {
410     OH_NNModel *model = OH_NNModel_Construct();
411     ASSERT_NE(nullptr, model);
412     int32_t inputDims[4] = {1, 1, 2, 3};
413     NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
414     ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_AddTensorToModel(model, tensorDesc));
415     for (int tensorType = 0; tensorType < 77; tensorType++) {
416         ASSERT_EQ(OH_NN_SUCCESS, OH_NNModel_SetTensorType(model, 0, static_cast<OH_NN_TensorType>(tensorType)));
417     }
418     OH_NNModel_Destroy(&model);
419     OH_NNTensorDesc_Destroy(&tensorDesc);
420 }
421