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 TensorTest : 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_Tensor_CreateTensor_0100
50 * @tc.desc: 创建Tensor,TensorDesc为nullptr
51 * @tc.type: FUNC
52 */
53 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensor_0100, Function | MediumTest | Level0)
54 {
55 size_t deviceId = 0;
56 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
57 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, nullptr);
58 ASSERT_EQ(nullptr, tensor);
59 }
60
61 /**
62 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensor_0200
63 * @tc.desc: 创建Tensor,deviceId=0,设备找到,创建成功
64 * @tc.type: FUNC
65 */
66 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensor_0200, Function | MediumTest | Level0)
67 {
68 int32_t inputDims[4] = {1, 1, 2, 3};
69 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
70 size_t deviceId = 0;
71 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
72 ASSERT_NE(nullptr, tensor);
73 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
74 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
75 }
76
77 /**
78 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensor_0300
79 * @tc.desc: 创建Tensor,成功创建
80 * @tc.type: FUNC
81 */
82 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensor_0300, Function | MediumTest | Level0)
83 {
84 int32_t inputDims[4] = {1, 1, 2, 3};
85 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
86 size_t deviceId = 0;
87 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
88 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
89 ASSERT_NE(nullptr, tensor);
90 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
91 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
92 }
93
94 /**
95 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithSize_0100
96 * @tc.desc: 根据size创建Tensor,TensorDesc为nullptr
97 * @tc.type: FUNC
98 */
99 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithSize_0100, Function | MediumTest | Level0)
100 {
101 size_t deviceId = 0;
102 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
103 size_t size = 4;
104 NN_Tensor* tensor = OH_NNTensor_CreateWithSize(deviceId, nullptr, size);
105 ASSERT_EQ(nullptr, tensor);
106 }
107
108 /**
109 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithSize_0200
110 * @tc.desc: 根据size创建Tensor,size = 0
111 * @tc.type: FUNC
112 */
113 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithSize_0200, Function | MediumTest | Level0)
114 {
115 int32_t inputDims[4] = {1, 1, 2, 3};
116 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
117 size_t deviceId = 0;
118 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
119 size_t size = 0;
120 NN_Tensor* tensor = OH_NNTensor_CreateWithSize(deviceId, tensorDesc, size);
121 ASSERT_EQ(nullptr, tensor);
122 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
123 }
124
125 /**
126 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithSize_0300
127 * @tc.desc: 根据size创建Tensor,size < tensor size
128 * @tc.type: FUNC
129 */
130 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithSize_0300, Function | MediumTest | Level0)
131 {
132 int32_t inputDims[4] = {1, 1, 2, 3};
133 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
134 size_t deviceId = 0;
135 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
136 size_t byteSize = 0;
137 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDesc, &byteSize));
138 size_t size = byteSize - 1;
139 NN_Tensor* tensor = OH_NNTensor_CreateWithSize(deviceId, tensorDesc, size);
140 ASSERT_EQ(nullptr, tensor);
141 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
142 }
143
144 /**
145 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0100
146 * @tc.desc: 通过fd根据size创建Tensor,TensorDesc为nullptr
147 * @tc.type: FUNC
148 */
149 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0100, Function | MediumTest | Level0)
150 {
151 int32_t inputDims[4] = {1, 1, 2, 3};
152 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
153 size_t deviceId = 0;
154 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
155 size_t size = 4;
156 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
157 ASSERT_NE(nullptr, tensor);
158 int fd = -1;
159 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
160 size_t offset = 1;
161 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, nullptr, fd, size, offset);
162 ASSERT_EQ(nullptr, tensortmp);
163 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
164 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
165 }
166
167 /**
168 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0200
169 * @tc.desc: 通过fd根据size创建Tensor,fd = -1
170 * @tc.type: FUNC
171 */
172 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0200, Function | MediumTest | Level0)
173 {
174 int32_t inputDims[4] = {1, 1, 2, 3};
175 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
176 size_t deviceId = 0;
177 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
178 size_t size = 4;
179 int fd = -1;
180 size_t offset = 1;
181 NN_Tensor* tensor = OH_NNTensor_CreateWithFd(deviceId, tensorDesc, fd, size, offset);
182 ASSERT_EQ(nullptr, tensor);
183 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
184 }
185
186 /**
187 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0300
188 * @tc.desc: 通过fd根据size创建Tensor,size = 0
189 * @tc.type: FUNC
190 */
191 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0300, Function | MediumTest | Level0)
192 {
193 int32_t inputDims[4] = {1, 1, 2, 3};
194 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
195 size_t deviceId = 0;
196 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
197 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
198 ASSERT_NE(nullptr, tensor);
199 int fd = -1;
200 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
201 size_t offset = 0;
202 NN_TensorDesc* tensorDescTmp = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
203 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, tensorDescTmp, fd, 0, offset);
204 ASSERT_EQ(nullptr, tensortmp);
205 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
206 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
207 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDescTmp));
208 }
209
210 /**
211 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0400
212 * @tc.desc: 通过fd根据size创建Tensor,size = offset
213 * @tc.type: FUNC
214 */
215 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0400, Function | MediumTest | Level0)
216 {
217 int32_t inputDims[4] = {1, 1, 2, 3};
218 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
219 size_t deviceId = 0;
220 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
221 size_t size = 4;
222 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
223 ASSERT_NE(nullptr, tensor);
224 int fd = -1;
225 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
226 size_t offset = 4;
227 NN_TensorDesc* tensorDescTmp = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
228 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, tensorDescTmp, fd, size, offset);
229 ASSERT_EQ(nullptr, tensortmp);
230 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
231 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
232 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDescTmp));
233 }
234
235 /**
236 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0500
237 * @tc.desc: 通过fd根据size创建Tensor,size-offset < tensorDescBytesize
238 * @tc.type: FUNC
239 */
240 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0500, Function | MediumTest | Level0)
241 {
242 int32_t inputDims[4] = {1, 1, 2, 3};
243 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
244 size_t deviceId = 0;
245 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
246 size_t byteSize = 0;
247 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDesc, &byteSize));
248 size_t size = 10;
249 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
250 ASSERT_NE(nullptr, tensor);
251 int fd = -1;
252 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
253 size_t offset = size - byteSize + 1;
254 NN_TensorDesc* tensorDescTmp = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
255 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, tensorDescTmp, fd, size, offset);
256 ASSERT_EQ(nullptr, tensortmp);
257 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
258 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
259 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDescTmp));
260 }
261
262 /**
263 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0600
264 * @tc.desc: 通过fd根据size创建Tensor,size-offset = tensorDescBytesize
265 * @tc.type: FUNC
266 */
267 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_CreateTensorWithFd_0600, Function | MediumTest | Level0)
268 {
269 int32_t inputDims[4] = {1, 1, 2, 515};
270 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
271 size_t deviceId = 0;
272 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
273 size_t byteSize = 0;
274 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDesc, &byteSize));
275 size_t size = byteSize;
276 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
277 ASSERT_NE(nullptr, tensor);
278 int fd = -1;
279 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
280 inputDims[3] = 3;
281 NN_TensorDesc* tensorDescTmp = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
282 size_t byteSizeTmp = 0;
283 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDescTmp, &byteSizeTmp));
284 size_t offset = size - byteSizeTmp;
285 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, tensorDescTmp, fd, size, offset);
286 ASSERT_NE(nullptr, tensortmp);
287 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
288 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensortmp));
289 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
290 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDescTmp));
291 }
292
293 /**
294 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetDataBuffer_0100
295 * @tc.desc: 获取databuffer,tensor为空
296 * @tc.type: FUNC
297 */
298 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetDataBuffer_0100, Function | MediumTest | Level0)
299 {
300 ASSERT_EQ(nullptr, OH_NNTensor_GetDataBuffer(nullptr));
301 }
302
303 /**
304 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetDataBuffer_0200
305 * @tc.desc: 获取databuffer,返回正确
306 * @tc.type: FUNC
307 */
308 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetDataBuffer_0200, Function | MediumTest | Level0)
309 {
310 int32_t inputDims[4] = {1, 1, 2, 3};
311 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
312 size_t deviceId = 0;
313 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
314 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
315 ASSERT_NE(nullptr, tensor);
316 ASSERT_NE(nullptr, OH_NNTensor_GetDataBuffer(tensor));
317 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
318 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
319 }
320
321 /**
322 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_Destroy_0100
323 * @tc.desc: 销毁tensor,tensor为空
324 * @tc.type: FUNC
325 */
326 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_Destroy_0100, Function | MediumTest | Level0)
327 {
328 ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNTensor_Destroy(nullptr));
329 }
330
331 /**
332 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_Destroy_0200
333 * @tc.desc: 销毁tensor,tensor为空
334 * @tc.type: FUNC
335 */
336 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_Destroy_0200, Function | MediumTest | Level0)
337 {
338 NN_Tensor* tensor = nullptr;
339 ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNTensor_Destroy(&tensor));
340 }
341
342 /**
343 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetTensorDesc_0100
344 * @tc.desc: 获取TensorDesc,tensor为空
345 * @tc.type: FUNC
346 */
347 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetTensorDesc_0100, Function | MediumTest | Level0)
348 {
349 ASSERT_EQ(nullptr, OH_NNTensor_GetTensorDesc(nullptr));
350 }
351
352 /**
353 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetTensorDesc_0200
354 * @tc.desc: 获取TensorDesc,返回正确
355 * @tc.type: FUNC
356 */
357 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetTensorDesc_0200, Function | MediumTest | Level0)
358 {
359 int32_t inputDims[4] = {1, 1, 2, 3};
360 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
361 size_t deviceId = 0;
362 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
363 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
364 ASSERT_NE(nullptr, tensor);
365 ASSERT_NE(nullptr, OH_NNTensor_GetTensorDesc(tensor));
366 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
367 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
368 }
369
370 /**
371 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetSize_0100
372 * @tc.desc: 获取SIZE,tensor为空
373 * @tc.type: FUNC
374 */
375 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetSize_0100, Function | MediumTest | Level0)
376 {
377 size_t size = 0;
378 ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNTensor_GetSize(nullptr, &size));
379 }
380
381 /**
382 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetSize_0200
383 * @tc.desc: 获取SIZE,OH_NNTensor_Create创建
384 * @tc.type: FUNC
385 */
386 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetSize_0200, Function | MediumTest | Level0)
387 {
388 int32_t inputDims[4] = {1, 1, 2, 3};
389 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
390 size_t deviceId = 0;
391 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
392 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
393 ASSERT_NE(nullptr, tensor);
394 size_t size = 0;
395 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetSize(tensor, &size));
396 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
397 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
398 }
399
400 /**
401 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetSize_0300
402 * @tc.desc: 获取SIZE,OH_NNTensor_CreateWithSize创建
403 * @tc.type: FUNC
404 */
405 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetSize_0300, Function | MediumTest | Level0)
406 {
407 int32_t inputDims[4] = {1, 1, 2, 3};
408 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
409 size_t deviceId = 0;
410 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
411 size_t byteSize = 0;
412 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDesc, &byteSize));
413 size_t size = byteSize + 2;
414 NN_Tensor* tensor = OH_NNTensor_CreateWithSize(deviceId, tensorDesc, size);
415 ASSERT_NE(nullptr, tensor);
416 size_t sizeTmp = 0;
417 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetSize(tensor, &sizeTmp));
418 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
419 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
420 }
421
422 /**
423 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetSize_0400
424 * @tc.desc: 获取SIZE,OH_NNTensor_CreateWithFd创建
425 * @tc.type: FUNC
426 */
427 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetSize_0400, Function | MediumTest | Level0)
428 {
429 int32_t inputDims[4] = {1, 1, 2, 515};
430 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
431 size_t deviceId = 0;
432 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
433 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
434 ASSERT_NE(nullptr, tensor);
435 int fd = -1;
436 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
437 size_t byteSize = 0;
438 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDesc, &byteSize));
439 size_t size = byteSize;
440 inputDims[3] = 3;
441 NN_TensorDesc* tensorDescTmp = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
442 size_t byteSizeTmp = 0;
443 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDescTmp, &byteSizeTmp));
444 size_t offset = size - byteSizeTmp;
445 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, tensorDescTmp, fd, size, offset);
446 size_t sizeTmp = 0;
447 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetSize(tensortmp, &sizeTmp));
448 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
449 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensortmp));
450 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
451 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDescTmp));
452 }
453
454 /**
455 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetFd_0100
456 * @tc.desc: 获取Fd,tensor为空
457 * @tc.type: FUNC
458 */
459 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetFd_0100, Function | MediumTest | Level0)
460 {
461 int fd = -1;
462 ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNTensor_GetFd(nullptr, &fd));
463 }
464
465 /**
466 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetFd_0200
467 * @tc.desc: 获取Fd,返回成功
468 * @tc.type: FUNC
469 */
470 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetFd_0200, Function | MediumTest | Level0)
471 {
472 int32_t inputDims[4] = {1, 1, 2, 3};
473 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
474 size_t deviceId = 0;
475 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
476 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
477 ASSERT_NE(nullptr, tensor);
478 int fd = -1;
479 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
480 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
481 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
482 }
483
484 /**
485 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetOffset_0100
486 * @tc.desc: 获取offset,tensor为空
487 * @tc.type: FUNC
488 */
489 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetOffset_0100, Function | MediumTest | Level0)
490 {
491 size_t offset = 0;
492 ASSERT_EQ(OH_NN_INVALID_PARAMETER, OH_NNTensor_GetOffset(nullptr, &offset));
493 }
494
495 /**
496 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetOffset_0200
497 * @tc.desc: 获取offset,返回成功,offset = 0
498 * @tc.type: FUNC
499 */
500 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetOffset_0200, Function | MediumTest | Level0)
501 {
502 int32_t inputDims[4] = {1, 1, 2, 3};
503 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
504 size_t deviceId = 0;
505 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
506 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
507 ASSERT_NE(nullptr, tensor);
508 size_t offset = 0;
509 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetOffset(tensor, &offset));
510 ASSERT_EQ(0, offset);
511 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
512 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
513 }
514
515 /**
516 * @tc.number : SUB_AI_NNRt_Func_North_Tensor_GetOffset_0300
517 * @tc.desc: 获取offset,通过OH_NNTensor_CreateWithFd创建,返回成功,offset = 设置值
518 * @tc.type: FUNC
519 */
520 HWTEST_F(TensorTest, SUB_AI_NNRt_Func_North_Tensor_GetOffset_0300, Function | MediumTest | Level0)
521 {
522 int32_t inputDims[4] = {1, 1, 2, 515};
523 NN_TensorDesc* tensorDesc = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
524 size_t deviceId = 0;
525 ASSERT_EQ(OH_NN_SUCCESS, GetDeviceID(&deviceId));
526 size_t byteSize = 0;
527 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDesc, &byteSize));
528 size_t size = byteSize;
529 NN_Tensor* tensor = OH_NNTensor_Create(deviceId, tensorDesc);
530 ASSERT_NE(nullptr, tensor);
531 int fd = -1;
532 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetFd(tensor, &fd));
533 inputDims[3] = 3;
534 NN_TensorDesc* tensorDescTmp = createTensorDesc(inputDims, 4, OH_NN_FLOAT32, OH_NN_FORMAT_NCHW);
535 size_t byteSizeTmp = 0;
536 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_GetByteSize(tensorDescTmp, &byteSizeTmp));
537 size_t offset = size - byteSizeTmp;
538 NN_Tensor* tensortmp = OH_NNTensor_CreateWithFd(deviceId, tensorDescTmp, fd, size, offset);
539 ASSERT_NE(nullptr, tensortmp);
540 size_t offsettmp = 0;
541 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_GetOffset(tensortmp, &offsettmp));
542 ASSERT_EQ(offset, offsettmp);
543 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensor));
544 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensor_Destroy(&tensortmp));
545 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDesc));
546 ASSERT_EQ(OH_NN_SUCCESS, OH_NNTensorDesc_Destroy(&tensorDescTmp));
547 }
548