• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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