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