1be168c0dSopenharmony_ci/*
2be168c0dSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3be168c0dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4be168c0dSopenharmony_ci * you may not use this file except in compliance with the License.
5be168c0dSopenharmony_ci * You may obtain a copy of the License at
6be168c0dSopenharmony_ci *
7be168c0dSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8be168c0dSopenharmony_ci *
9be168c0dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10be168c0dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11be168c0dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12be168c0dSopenharmony_ci * See the License for the specific language governing permissions and
13be168c0dSopenharmony_ci * limitations under the License.
14be168c0dSopenharmony_ci */
15be168c0dSopenharmony_ci
16be168c0dSopenharmony_ci#include "gtest/gtest.h"
17be168c0dSopenharmony_ci#include <inttypes.h>
18be168c0dSopenharmony_ci#include <random>
19be168c0dSopenharmony_ci#include <securec.h>
20be168c0dSopenharmony_ci#include "include/c_api/context_c.h"
21be168c0dSopenharmony_ci#include "include/c_api/model_c.h"
22be168c0dSopenharmony_ci#include "include/c_api/types_c.h"
23be168c0dSopenharmony_ci#include "include/c_api/status_c.h"
24be168c0dSopenharmony_ci#include "include/c_api/data_type_c.h"
25be168c0dSopenharmony_ci#include "include/c_api/tensor_c.h"
26be168c0dSopenharmony_ci#include "include/c_api/format_c.h"
27be168c0dSopenharmony_ci#include "../utils/model_utils.h"
28be168c0dSopenharmony_ci#include "../utils/common.h"
29be168c0dSopenharmony_ci
30be168c0dSopenharmony_ciclass MSLiteTest: public testing::Test {
31be168c0dSopenharmony_ci  protected:
32be168c0dSopenharmony_ci    static void SetUpTestCase(void) {}
33be168c0dSopenharmony_ci    static void TearDownTestCase(void) {}
34be168c0dSopenharmony_ci    virtual void SetUp() {}
35be168c0dSopenharmony_ci    virtual void TearDown() {}
36be168c0dSopenharmony_ci};
37be168c0dSopenharmony_ci
38be168c0dSopenharmony_cistd::string g_testFilesDir = "/data/test/resource/";
39be168c0dSopenharmony_ci
40be168c0dSopenharmony_ci/*
41be168c0dSopenharmony_ci * @tc.name: Context_Create
42be168c0dSopenharmony_ci * @tc.desc: Verify the return context of the OH_AI_ContextCreate function.
43be168c0dSopenharmony_ci * @tc.type: FUNC
44be168c0dSopenharmony_ci */
45be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Create, testing::ext::TestSize.Level0) {
46be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
47be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
48be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
49be168c0dSopenharmony_ci}
50be168c0dSopenharmony_ci
51be168c0dSopenharmony_ci/*
52be168c0dSopenharmony_ci * @tc.name: Context_Destroy
53be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ContextDestroy function.
54be168c0dSopenharmony_ci * @tc.type: FUNC
55be168c0dSopenharmony_ci */
56be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Destroy, testing::ext::TestSize.Level0) {
57be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
58be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
59be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
60be168c0dSopenharmony_ci    OH_AI_ContextDestroy(&context);
61be168c0dSopenharmony_ci    ASSERT_EQ(context, nullptr);
62be168c0dSopenharmony_ci}
63be168c0dSopenharmony_ci
64be168c0dSopenharmony_ci/*
65be168c0dSopenharmony_ci * @tc.name: Context_Thread_Num
66be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ContextSetThreadNum/OH_AI_ContextGetThreadNum function.
67be168c0dSopenharmony_ci * @tc.type: FUNC
68be168c0dSopenharmony_ci */
69be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Thread_Num, testing::ext::TestSize.Level0) {
70be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
71be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
72be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
73be168c0dSopenharmony_ci    OH_AI_ContextSetThreadNum(context, 2);
74be168c0dSopenharmony_ci    auto thread_num = OH_AI_ContextGetThreadNum(context);
75be168c0dSopenharmony_ci    printf("==========thread_num: %d\n", thread_num);
76be168c0dSopenharmony_ci    ASSERT_EQ(thread_num, 2);
77be168c0dSopenharmony_ci}
78be168c0dSopenharmony_ci
79be168c0dSopenharmony_ci/*
80be168c0dSopenharmony_ci * @tc.name: Context_Thread_Affinity
81be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ContextSetThreadAffinityMode/OH_AI_ContextGetThreadAffinityMode function.
82be168c0dSopenharmony_ci * @tc.type: FUNC
83be168c0dSopenharmony_ci */
84be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Thread_Affinity, testing::ext::TestSize.Level0) {
85be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
86be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
87be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
88be168c0dSopenharmony_ci    OH_AI_ContextSetThreadNum(context, 4);
89be168c0dSopenharmony_ci    auto thread_num = OH_AI_ContextGetThreadNum(context);
90be168c0dSopenharmony_ci    printf("==========thread_num: %d\n", thread_num);
91be168c0dSopenharmony_ci    ASSERT_EQ(thread_num, 4);
92be168c0dSopenharmony_ci
93be168c0dSopenharmony_ci    OH_AI_ContextSetThreadAffinityMode(context, 2);
94be168c0dSopenharmony_ci    int thread_affinity_mode = OH_AI_ContextGetThreadAffinityMode(context);
95be168c0dSopenharmony_ci    printf("==========thread_affinity_mode:%d\n", thread_affinity_mode);
96be168c0dSopenharmony_ci    ASSERT_EQ(thread_affinity_mode, 2);
97be168c0dSopenharmony_ci}
98be168c0dSopenharmony_ci
99be168c0dSopenharmony_ci/*
100be168c0dSopenharmony_ci * @tc.name: Context_Thread_Affinity_Corelist
101be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ContextSetThreadAffinityCoreList/OH_AI_ContextGetThreadAffinityCoreList function.
102be168c0dSopenharmony_ci * @tc.type: FUNC
103be168c0dSopenharmony_ci */
104be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Thread_Affinity_Corelist, testing::ext::TestSize.Level0) {
105be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
106be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
107be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
108be168c0dSopenharmony_ci    OH_AI_ContextSetThreadNum(context, 4);
109be168c0dSopenharmony_ci    auto thread_num = OH_AI_ContextGetThreadNum(context);
110be168c0dSopenharmony_ci    printf("==========thread_num: %d\n", thread_num);
111be168c0dSopenharmony_ci    ASSERT_EQ(thread_num, 4);
112be168c0dSopenharmony_ci
113be168c0dSopenharmony_ci    constexpr size_t coreNum = 4;
114be168c0dSopenharmony_ci    int32_t coreList[coreNum] = {0, 1, 2, 3};
115be168c0dSopenharmony_ci    OH_AI_ContextSetThreadAffinityCoreList(context, coreList, coreNum);
116be168c0dSopenharmony_ci    size_t retCoreNum;
117be168c0dSopenharmony_ci    const int32_t *retCoreList = nullptr;
118be168c0dSopenharmony_ci    retCoreList = OH_AI_ContextGetThreadAffinityCoreList(context, &retCoreNum);
119be168c0dSopenharmony_ci    ASSERT_EQ(retCoreNum, coreNum);
120be168c0dSopenharmony_ci    for (size_t i = 0; i < retCoreNum; i++) {
121be168c0dSopenharmony_ci        printf("==========retCoreList:%d\n", retCoreList[i]);
122be168c0dSopenharmony_ci        ASSERT_EQ(retCoreList[i], coreList[i]);
123be168c0dSopenharmony_ci    }
124be168c0dSopenharmony_ci}
125be168c0dSopenharmony_ci
126be168c0dSopenharmony_ci/*
127be168c0dSopenharmony_ci * @tc.name: Context_Enable_Parallel
128be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ContextSetEnableParallel/OH_AI_ContextGetEnableParallel function.
129be168c0dSopenharmony_ci * @tc.type: FUNC
130be168c0dSopenharmony_ci */
131be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Enable_Parallel, testing::ext::TestSize.Level0) {
132be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
133be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
134be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
135be168c0dSopenharmony_ci    OH_AI_ContextSetThreadNum(context, 4);
136be168c0dSopenharmony_ci    auto thread_num = OH_AI_ContextGetThreadNum(context);
137be168c0dSopenharmony_ci    printf("==========thread_num: %d\n", thread_num);
138be168c0dSopenharmony_ci    ASSERT_EQ(thread_num, 4);
139be168c0dSopenharmony_ci
140be168c0dSopenharmony_ci    OH_AI_ContextSetEnableParallel(context, true);
141be168c0dSopenharmony_ci    bool isParallel = OH_AI_ContextGetEnableParallel(context);
142be168c0dSopenharmony_ci    printf("==========isParallel:%d\n", isParallel);
143be168c0dSopenharmony_ci    ASSERT_EQ(isParallel, true);
144be168c0dSopenharmony_ci
145be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
146be168c0dSopenharmony_ci    printf("==========Create model==========\n");
147be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
148be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
149be168c0dSopenharmony_ci    ModelPredict(model, context, "ml_face_isface", {}, false, true, false);
150be168c0dSopenharmony_ci}
151be168c0dSopenharmony_ci
152be168c0dSopenharmony_ci/*
153be168c0dSopenharmony_ci * @tc.name: Context_Enable_FP16
154be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_DeviceInfoSetEnableFP16/OH_AI_DeviceInfoGetEnableFP16 function.
155be168c0dSopenharmony_ci * @tc.type: FUNC
156be168c0dSopenharmony_ci */
157be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Enable_FP16, testing::ext::TestSize.Level0) {
158be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
159be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
160be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
161be168c0dSopenharmony_ci
162be168c0dSopenharmony_ci    OH_AI_DeviceInfoHandle cpu_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_CPU);
163be168c0dSopenharmony_ci    ASSERT_NE(cpu_device_info, nullptr);
164be168c0dSopenharmony_ci    OH_AI_DeviceInfoSetEnableFP16(cpu_device_info, true);
165be168c0dSopenharmony_ci    bool isFp16 = OH_AI_DeviceInfoGetEnableFP16(cpu_device_info);
166be168c0dSopenharmony_ci    printf("==========isFp16:%d\n", isFp16);
167be168c0dSopenharmony_ci    ASSERT_EQ(isFp16, true);
168be168c0dSopenharmony_ci
169be168c0dSopenharmony_ci    OH_AI_ContextAddDeviceInfo(context, cpu_device_info);
170be168c0dSopenharmony_ci
171be168c0dSopenharmony_ci    printf("==========Create model==========\n");
172be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
173be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
174be168c0dSopenharmony_ci    ModelPredict(model, context, "ml_face_isface", {}, false, true, false);
175be168c0dSopenharmony_ci}
176be168c0dSopenharmony_ci
177be168c0dSopenharmony_ci/*
178be168c0dSopenharmony_ci * @tc.name: Context_Provider
179be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_DeviceInfoSetProvider/OH_AI_DeviceInfoGetProvider function.
180be168c0dSopenharmony_ci * @tc.type: FUNC
181be168c0dSopenharmony_ci */
182be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Provider, testing::ext::TestSize.Level0) {
183be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
184be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
185be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
186be168c0dSopenharmony_ci
187be168c0dSopenharmony_ci    OH_AI_DeviceInfoHandle cpu_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_CPU);
188be168c0dSopenharmony_ci    ASSERT_NE(cpu_device_info, nullptr);
189be168c0dSopenharmony_ci    OH_AI_DeviceInfoSetProvider(cpu_device_info, "vendor_new");
190be168c0dSopenharmony_ci    ASSERT_EQ(strcmp(OH_AI_DeviceInfoGetProvider(cpu_device_info), "vendor_new"), 0);
191be168c0dSopenharmony_ci
192be168c0dSopenharmony_ci    OH_AI_ContextAddDeviceInfo(context, cpu_device_info);
193be168c0dSopenharmony_ci
194be168c0dSopenharmony_ci    printf("==========Create model==========\n");
195be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
196be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
197be168c0dSopenharmony_ci    ModelPredict(model, context, "ml_face_isface", {}, false, true, false);
198be168c0dSopenharmony_ci}
199be168c0dSopenharmony_ci
200be168c0dSopenharmony_ci/*
201be168c0dSopenharmony_ci * @tc.name: Context_Provider_Device
202be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_DeviceInfoSetProviderDevice/OH_AI_DeviceInfoGetProviderDevice function.
203be168c0dSopenharmony_ci * @tc.type: FUNC
204be168c0dSopenharmony_ci */
205be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Provider_Device, testing::ext::TestSize.Level0) {
206be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
207be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
208be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
209be168c0dSopenharmony_ci
210be168c0dSopenharmony_ci    OH_AI_DeviceInfoHandle cpu_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_CPU);
211be168c0dSopenharmony_ci    ASSERT_NE(cpu_device_info, nullptr);
212be168c0dSopenharmony_ci    OH_AI_DeviceInfoSetProviderDevice(cpu_device_info, "cpu_new");
213be168c0dSopenharmony_ci    ASSERT_EQ(strcmp(OH_AI_DeviceInfoGetProviderDevice(cpu_device_info), "cpu_new"), 0);
214be168c0dSopenharmony_ci
215be168c0dSopenharmony_ci    OH_AI_ContextAddDeviceInfo(context, cpu_device_info);
216be168c0dSopenharmony_ci
217be168c0dSopenharmony_ci    printf("==========Create model==========\n");
218be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
219be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
220be168c0dSopenharmony_ci    ModelPredict(model, context, "ml_face_isface", {}, false, true, false);
221be168c0dSopenharmony_ci}
222be168c0dSopenharmony_ci
223be168c0dSopenharmony_ci/*
224be168c0dSopenharmony_ci * @tc.name: Context_Device
225be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_DeviceInfoCreate/OH_AI_DeviceInfoDestroy function.
226be168c0dSopenharmony_ci * @tc.type: FUNC
227be168c0dSopenharmony_ci */
228be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Device, testing::ext::TestSize.Level0) {
229be168c0dSopenharmony_ci    OH_AI_DeviceInfoHandle cpu_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_CPU);
230be168c0dSopenharmony_ci    ASSERT_NE(cpu_device_info, nullptr);
231be168c0dSopenharmony_ci    OH_AI_DeviceType device_type = OH_AI_DeviceInfoGetDeviceType(cpu_device_info);
232be168c0dSopenharmony_ci    printf("==========device_type:%d\n", device_type);
233be168c0dSopenharmony_ci    ASSERT_EQ(device_type, OH_AI_DEVICETYPE_CPU);
234be168c0dSopenharmony_ci
235be168c0dSopenharmony_ci    OH_AI_DeviceInfoDestroy(&cpu_device_info);
236be168c0dSopenharmony_ci    ASSERT_EQ(cpu_device_info, nullptr);
237be168c0dSopenharmony_ci}
238be168c0dSopenharmony_ci
239be168c0dSopenharmony_ci/*
240be168c0dSopenharmony_ci * @tc.name: Context_Kirin_Frequency
241be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_DeviceInfoSetFrequency/OH_AI_DeviceInfoGetFrequency function.
242be168c0dSopenharmony_ci * @tc.type: FUNC
243be168c0dSopenharmony_ci */
244be168c0dSopenharmony_ciHWTEST(MSLiteTest, Context_Kirin_Frequency, testing::ext::TestSize.Level0) {
245be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
246be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
247be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
248be168c0dSopenharmony_ci
249be168c0dSopenharmony_ci    OH_AI_DeviceInfoHandle npu_device_info = OH_AI_DeviceInfoCreate(OH_AI_DEVICETYPE_KIRIN_NPU);
250be168c0dSopenharmony_ci    ASSERT_NE(npu_device_info, nullptr);
251be168c0dSopenharmony_ci    OH_AI_DeviceInfoSetFrequency(npu_device_info, 1);
252be168c0dSopenharmony_ci    int frequency = OH_AI_DeviceInfoGetFrequency(npu_device_info);
253be168c0dSopenharmony_ci    printf("==========frequency:%d\n", frequency);
254be168c0dSopenharmony_ci    ASSERT_EQ(frequency, 1);
255be168c0dSopenharmony_ci    OH_AI_ContextAddDeviceInfo(context, npu_device_info);
256be168c0dSopenharmony_ci
257be168c0dSopenharmony_ci    OH_AI_ContextDestroy(&context);
258be168c0dSopenharmony_ci    ASSERT_EQ(context, nullptr);
259be168c0dSopenharmony_ci}
260be168c0dSopenharmony_ci
261be168c0dSopenharmony_ci/*
262be168c0dSopenharmony_ci * @tc.name: Model_BuildByBuffer
263be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelBuild function.
264be168c0dSopenharmony_ci * @tc.type: FUNC
265be168c0dSopenharmony_ci */
266be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_BuildByBuffer, testing::ext::TestSize.Level0) {
267be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
268be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
269be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
270be168c0dSopenharmony_ci
271be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
272be168c0dSopenharmony_ci    printf("==========Create model==========\n");
273be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
274be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
275be168c0dSopenharmony_ci    ModelPredict(model, context, "ml_face_isface", {}, true, true, false);
276be168c0dSopenharmony_ci}
277be168c0dSopenharmony_ci
278be168c0dSopenharmony_ci/*
279be168c0dSopenharmony_ci * @tc.name: Model_GetOutputs
280be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelGetOutputs/OH_AI_ModelGetInputs function.
281be168c0dSopenharmony_ci * @tc.type: FUNC
282be168c0dSopenharmony_ci */
283be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_GetOutputs, testing::ext::TestSize.Level0) {
284be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
285be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
286be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
287be168c0dSopenharmony_ci
288be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
289be168c0dSopenharmony_ci    printf("==========Create model==========\n");
290be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
291be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
292be168c0dSopenharmony_ci    printf("==========Model build==========\n");
293be168c0dSopenharmony_ci    OH_AI_ModelBuildFromFile(model, "/data/test/resource/ml_face_isface.ms", OH_AI_MODELTYPE_MINDIR, context);
294be168c0dSopenharmony_ci
295be168c0dSopenharmony_ci    printf("==========Model Predict==========\n");
296be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
297be168c0dSopenharmony_ci    OH_AI_TensorHandleArray output;
298be168c0dSopenharmony_ci    FillInputsData(inputs, "ml_face_isface", false);
299be168c0dSopenharmony_ci    OH_AI_Status ret = OH_AI_ModelPredict(model, inputs, &output, nullptr, nullptr);
300be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
301be168c0dSopenharmony_ci
302be168c0dSopenharmony_ci    printf("==========GetOutput==========\n");
303be168c0dSopenharmony_ci    OH_AI_TensorHandleArray outputs = OH_AI_ModelGetOutputs(model);
304be168c0dSopenharmony_ci    for (size_t i = 0; i < outputs.handle_num; ++i) {
305be168c0dSopenharmony_ci        OH_AI_TensorHandle tensor = outputs.handle_list[i];
306be168c0dSopenharmony_ci        int64_t elementNum = OH_AI_TensorGetElementNum(tensor);
307be168c0dSopenharmony_ci        printf("Tensor name: %s, elements num: %" PRId64 ".\n", OH_AI_TensorGetName(tensor), elementNum);
308be168c0dSopenharmony_ci        float *outputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(tensor));
309be168c0dSopenharmony_ci        printf("output data is:");
310be168c0dSopenharmony_ci        constexpr int printNum = 20;
311be168c0dSopenharmony_ci        for (int j = 0; j < elementNum && j <= printNum; ++j) {
312be168c0dSopenharmony_ci            printf("%f ", outputData[j]);
313be168c0dSopenharmony_ci        }
314be168c0dSopenharmony_ci        printf("\n");
315be168c0dSopenharmony_ci        printf("==========compFp32WithTData==========\n");
316be168c0dSopenharmony_ci        std::string expectedDataFile = g_testFilesDir + "ml_face_isface" + std::to_string(i) + ".output";
317be168c0dSopenharmony_ci        bool result = compFp32WithTData(outputData, expectedDataFile, 0.01, 0.01, false);
318be168c0dSopenharmony_ci        EXPECT_EQ(result, true);
319be168c0dSopenharmony_ci    }
320be168c0dSopenharmony_ci}
321be168c0dSopenharmony_ci
322be168c0dSopenharmony_ci/*
323be168c0dSopenharmony_ci * @tc.name: Model_Resize
324be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelResize function.
325be168c0dSopenharmony_ci * @tc.type: FUNC
326be168c0dSopenharmony_ci */
327be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_Resize, testing::ext::TestSize.Level0) {
328be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
329be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
330be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
331be168c0dSopenharmony_ci
332be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
333be168c0dSopenharmony_ci    printf("==========Create model==========\n");
334be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
335be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
336be168c0dSopenharmony_ci    ModelPredict(model, context, "ml_ocr_cn", {4, {1, 32, 512, 1}}, false, true, false);
337be168c0dSopenharmony_ci}
338be168c0dSopenharmony_ci
339be168c0dSopenharmony_ci/*
340be168c0dSopenharmony_ci * @tc.name: Model_GetInputByTensorName
341be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelGetInputByTensorName function.
342be168c0dSopenharmony_ci * @tc.type: FUNC
343be168c0dSopenharmony_ci */
344be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_GetInputByTensorName, testing::ext::TestSize.Level0) {
345be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
346be168c0dSopenharmony_ci    size_t size1;
347be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
348be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
349be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
350be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
351be168c0dSopenharmony_ci
352be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
353be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
354be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
355be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
356be168c0dSopenharmony_ci    printf("==========Create model==========\n");
357be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
358be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
359be168c0dSopenharmony_ci    printf("==========Build model==========\n");
360be168c0dSopenharmony_ci    OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/resource/ml_face_isface.ms", OH_AI_MODELTYPE_MINDIR,
361be168c0dSopenharmony_ci                                                context);
362be168c0dSopenharmony_ci    printf("==========build model return code:%d\n", ret);
363be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
364be168c0dSopenharmony_ci
365be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
366be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_ModelGetInputByTensorName(model, "data");
367be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
368be168c0dSopenharmony_ci    int64_t elementNum = OH_AI_TensorGetElementNum(tensor);
369be168c0dSopenharmony_ci    printf("Tensor name: %s, elements num: %" PRId64 ".\n", OH_AI_TensorGetName(tensor), elementNum);
370be168c0dSopenharmony_ci    float *inputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(tensor));
371be168c0dSopenharmony_ci    ASSERT_NE(inputData, nullptr);
372be168c0dSopenharmony_ci    printf("==========Transpose==========\n");
373be168c0dSopenharmony_ci    size_t shapeNum;
374be168c0dSopenharmony_ci    const int64_t *shape = OH_AI_TensorGetShape(tensor, &shapeNum);
375be168c0dSopenharmony_ci    auto imageBufNhwc = new char[size1];
376be168c0dSopenharmony_ci    PackNCHWToNHWCFp32(imageBuf, imageBufNhwc, shape[0], shape[1] * shape[2], shape[3]);
377be168c0dSopenharmony_ci    errno_t mRet = memcpy_s(inputData, size1, imageBufNhwc, size1);
378be168c0dSopenharmony_ci    if (mRet != EOK) {
379be168c0dSopenharmony_ci        printf("memcpy_s failed, ret: %d\n", mRet);
380be168c0dSopenharmony_ci    }
381be168c0dSopenharmony_ci    printf("input data is:");
382be168c0dSopenharmony_ci    constexpr int printNum = 20;
383be168c0dSopenharmony_ci    for (int j = 0; j < elementNum && j <= printNum; ++j) {
384be168c0dSopenharmony_ci        printf("%f ", inputData[j]);
385be168c0dSopenharmony_ci    }
386be168c0dSopenharmony_ci    printf("\n");
387be168c0dSopenharmony_ci
388be168c0dSopenharmony_ci    printf("==========Model Predict==========\n");
389be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
390be168c0dSopenharmony_ci    ASSERT_NE(inputs.handle_list, nullptr);
391be168c0dSopenharmony_ci    OH_AI_TensorHandleArray outputs;
392be168c0dSopenharmony_ci    ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
393be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
394be168c0dSopenharmony_ci    CompareResult(outputs, "ml_face_isface");
395be168c0dSopenharmony_ci    delete[] imageBuf;
396be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
397be168c0dSopenharmony_ci}
398be168c0dSopenharmony_ci
399be168c0dSopenharmony_ci/*
400be168c0dSopenharmony_ci * @tc.name: Model_GetOutputByTensorName
401be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelGetOutputByTensorName function.
402be168c0dSopenharmony_ci * @tc.type: FUNC
403be168c0dSopenharmony_ci */
404be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_GetOutputByTensorName, testing::ext::TestSize.Level0) {
405be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
406be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
407be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
408be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
409be168c0dSopenharmony_ci    printf("==========Create model==========\n");
410be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
411be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
412be168c0dSopenharmony_ci    printf("==========Build model==========\n");
413be168c0dSopenharmony_ci    OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/resource/ml_face_isface.ms", OH_AI_MODELTYPE_MINDIR,
414be168c0dSopenharmony_ci                                                context);
415be168c0dSopenharmony_ci    printf("==========build model return code:%d\n", ret);
416be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
417be168c0dSopenharmony_ci
418be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
419be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
420be168c0dSopenharmony_ci    ASSERT_NE(inputs.handle_list, nullptr);
421be168c0dSopenharmony_ci    FillInputsData(inputs, "ml_face_isface", true);
422be168c0dSopenharmony_ci    printf("==========Model Predict==========\n");
423be168c0dSopenharmony_ci    OH_AI_TensorHandleArray outputs;
424be168c0dSopenharmony_ci    ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
425be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
426be168c0dSopenharmony_ci
427be168c0dSopenharmony_ci    printf("==========GetOutput==========\n");
428be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_ModelGetOutputByTensorName(model, "prob");
429be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
430be168c0dSopenharmony_ci    int64_t elementNum = OH_AI_TensorGetElementNum(tensor);
431be168c0dSopenharmony_ci    printf("Tensor name: %s, elements num: %" PRId64 ".\n", OH_AI_TensorGetName(tensor), elementNum);
432be168c0dSopenharmony_ci    float *outputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(tensor));
433be168c0dSopenharmony_ci    printf("output data is:");
434be168c0dSopenharmony_ci    constexpr int printNum = 20;
435be168c0dSopenharmony_ci    for (int j = 0; j < elementNum && j <= printNum; ++j) {
436be168c0dSopenharmony_ci        printf("%f ", outputData[j]);
437be168c0dSopenharmony_ci    }
438be168c0dSopenharmony_ci    printf("\n");
439be168c0dSopenharmony_ci    printf("==========compFp32WithTData==========\n");
440be168c0dSopenharmony_ci    bool result = compFp32WithTData(outputData, g_testFilesDir + "ml_face_isface0.output", 0.01, 0.01, false);
441be168c0dSopenharmony_ci    EXPECT_EQ(result, true);
442be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
443be168c0dSopenharmony_ci}
444be168c0dSopenharmony_ci
445be168c0dSopenharmony_ci/*
446be168c0dSopenharmony_ci * @tc.name: TrainCfg_CreateDestroy
447be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TrainCfgCreate/OH_AI_TrainCfgDestroy function.
448be168c0dSopenharmony_ci * @tc.type: FUNC
449be168c0dSopenharmony_ci */
450be168c0dSopenharmony_ciHWTEST(MSLiteTest, TrainCfg_CreateDestroy, testing::ext::TestSize.Level0) {
451be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle trainCfg = OH_AI_TrainCfgCreate();
452be168c0dSopenharmony_ci    ASSERT_NE(trainCfg, nullptr);
453be168c0dSopenharmony_ci
454be168c0dSopenharmony_ci    OH_AI_TrainCfgDestroy(&trainCfg);
455be168c0dSopenharmony_ci    ASSERT_EQ(trainCfg, nullptr);
456be168c0dSopenharmony_ci}
457be168c0dSopenharmony_ci
458be168c0dSopenharmony_ci/*
459be168c0dSopenharmony_ci * @tc.name: TrainCfg_LossName
460be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TrainCfgSetLossName/OH_AI_TrainCfgGetLossName function.
461be168c0dSopenharmony_ci * @tc.type: FUNC
462be168c0dSopenharmony_ci */
463be168c0dSopenharmony_ciHWTEST(MSLiteTest, TrainCfg_LossName, testing::ext::TestSize.Level0) {
464be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle trainCfg = OH_AI_TrainCfgCreate();
465be168c0dSopenharmony_ci    ASSERT_NE(trainCfg, nullptr);
466be168c0dSopenharmony_ci    std::vector<std::string> set_train_cfg_loss_name = {"loss_fct"};
467be168c0dSopenharmony_ci    char **setLossName = TransStrVectorToCharArrays(set_train_cfg_loss_name);
468be168c0dSopenharmony_ci    OH_AI_TrainCfgSetLossName(trainCfg, const_cast<const char **>(setLossName), set_train_cfg_loss_name.size());
469be168c0dSopenharmony_ci
470be168c0dSopenharmony_ci    size_t getNum = 0;
471be168c0dSopenharmony_ci    char **getLossName = OH_AI_TrainCfgGetLossName(trainCfg, &getNum);
472be168c0dSopenharmony_ci    printf("trainCfg loss name: ");
473be168c0dSopenharmony_ci    for (size_t i = 0; i < getNum; i++) {
474be168c0dSopenharmony_ci        printf("%s ", getLossName[i]);
475be168c0dSopenharmony_ci    }
476be168c0dSopenharmony_ci    printf("\n");
477be168c0dSopenharmony_ci    ASSERT_EQ(strcmp(getLossName[0], "loss_fct"), 0);
478be168c0dSopenharmony_ci
479be168c0dSopenharmony_ci    for (size_t i = 0; i < getNum; i++) {
480be168c0dSopenharmony_ci        free(setLossName[i]);
481be168c0dSopenharmony_ci        free(getLossName[i]);
482be168c0dSopenharmony_ci    }
483be168c0dSopenharmony_ci    free(setLossName);
484be168c0dSopenharmony_ci    free(getLossName);
485be168c0dSopenharmony_ci    OH_AI_TrainCfgDestroy(&trainCfg);
486be168c0dSopenharmony_ci}
487be168c0dSopenharmony_ci
488be168c0dSopenharmony_ci/*
489be168c0dSopenharmony_ci * @tc.name: TrainCfg_OptimizationLevel
490be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TrainCfgSetOptimizationLevel/OH_AI_TrainCfgGetOptimizationLevel function.
491be168c0dSopenharmony_ci * @tc.type: FUNC
492be168c0dSopenharmony_ci */
493be168c0dSopenharmony_ciHWTEST(MSLiteTest, TrainCfg_OptimizationLevel, testing::ext::TestSize.Level0) {
494be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle trainCfg = OH_AI_TrainCfgCreate();
495be168c0dSopenharmony_ci    ASSERT_NE(trainCfg, nullptr);
496be168c0dSopenharmony_ci
497be168c0dSopenharmony_ci    OH_AI_OptimizationLevel optim_level = OH_AI_KO2;
498be168c0dSopenharmony_ci    OH_AI_TrainCfgSetOptimizationLevel(trainCfg, optim_level);
499be168c0dSopenharmony_ci    OH_AI_OptimizationLevel get_optim_level = OH_AI_TrainCfgGetOptimizationLevel(trainCfg);
500be168c0dSopenharmony_ci    ASSERT_EQ(get_optim_level, OH_AI_KO2);
501be168c0dSopenharmony_ci
502be168c0dSopenharmony_ci    OH_AI_TrainCfgDestroy(&trainCfg);
503be168c0dSopenharmony_ci    ASSERT_EQ(trainCfg, nullptr);
504be168c0dSopenharmony_ci}
505be168c0dSopenharmony_ci
506be168c0dSopenharmony_ci/*
507be168c0dSopenharmony_ci * @tc.name: Model_TrainModelBuild
508be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TrainModelBuild function.
509be168c0dSopenharmony_ci * @tc.type: FUNC
510be168c0dSopenharmony_ci */
511be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_TrainModelBuild, testing::ext::TestSize.Level0) {
512be168c0dSopenharmony_ci    printf("==========OH_AI_ContextCreate==========\n");
513be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
514be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
515be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
516be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate==========\n");
517be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
518be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
519be168c0dSopenharmony_ci
520be168c0dSopenharmony_ci    printf("==========OH_AI_RunStep==========\n");
521be168c0dSopenharmony_ci    ModelTrain(model, context, "lenet_train", {}, true, false, false);
522be168c0dSopenharmony_ci    printf("==========OH_AI_ExportModel==========\n");
523be168c0dSopenharmony_ci    auto status = OH_AI_ExportModel(model, OH_AI_MODELTYPE_MINDIR, "/data/test/resource/lenet_train_infer.ms",
524be168c0dSopenharmony_ci                                    OH_AI_NO_QUANT, true, nullptr, 0);
525be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
526be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
527be168c0dSopenharmony_ci
528be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate2==========\n");
529be168c0dSopenharmony_ci    context = OH_AI_ContextCreate();
530be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
531be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
532be168c0dSopenharmony_ci    OH_AI_ModelHandle model2 = OH_AI_ModelCreate();
533be168c0dSopenharmony_ci    ASSERT_NE(model2, nullptr);
534be168c0dSopenharmony_ci    printf("==========ModelPredict==========\n");
535be168c0dSopenharmony_ci    ModelPredict(model2, context, "lenet_train_infer", {}, true, false, true);
536be168c0dSopenharmony_ci}
537be168c0dSopenharmony_ci
538be168c0dSopenharmony_ci/*
539be168c0dSopenharmony_ci * @tc.name: Model_LearningRate
540be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelGetLearningRate/OH_AI_ModelSetLearningRate function.
541be168c0dSopenharmony_ci * @tc.type: FUNC
542be168c0dSopenharmony_ci */
543be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_LearningRate, testing::ext::TestSize.Level0) {
544be168c0dSopenharmony_ci    printf("==========OH_AI_ContextCreate==========\n");
545be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
546be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
547be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
548be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate==========\n");
549be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
550be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
551be168c0dSopenharmony_ci
552be168c0dSopenharmony_ci    printf("==========OH_AI_TrainCfgCreate==========\n");
553be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle train_cfg = OH_AI_TrainCfgCreate();
554be168c0dSopenharmony_ci    ASSERT_NE(train_cfg, nullptr);
555be168c0dSopenharmony_ci    printf("==========OH_AI_TrainModelBuildFromFile==========\n");
556be168c0dSopenharmony_ci    auto status = OH_AI_TrainModelBuildFromFile(model, "/data/test/resource/lenet_train.ms", OH_AI_MODELTYPE_MINDIR,
557be168c0dSopenharmony_ci                                                context, train_cfg);
558be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
559be168c0dSopenharmony_ci
560be168c0dSopenharmony_ci    auto learing_rate = OH_AI_ModelGetLearningRate(model);
561be168c0dSopenharmony_ci    printf("learing_rate: %f\n", learing_rate);
562be168c0dSopenharmony_ci    status = OH_AI_ModelSetLearningRate(model, 0.01f);
563be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
564be168c0dSopenharmony_ci    learing_rate = OH_AI_ModelGetLearningRate(model);
565be168c0dSopenharmony_ci    printf("get_learing_rate: %f", learing_rate);
566be168c0dSopenharmony_ci    ASSERT_EQ(learing_rate, 0.01f);
567be168c0dSopenharmony_ci
568be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
569be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
570be168c0dSopenharmony_ci    ASSERT_NE(inputs.handle_list, nullptr);
571be168c0dSopenharmony_ci    FillInputsData(inputs, "lenet_train", false);
572be168c0dSopenharmony_ci    status = OH_AI_ModelSetTrainMode(model, true);
573be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
574be168c0dSopenharmony_ci    printf("==========Model RunStep==========\n");
575be168c0dSopenharmony_ci    status = OH_AI_RunStep(model, nullptr, nullptr);
576be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
577be168c0dSopenharmony_ci
578be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
579be168c0dSopenharmony_ci}
580be168c0dSopenharmony_ci
581be168c0dSopenharmony_ci/*
582be168c0dSopenharmony_ci * @tc.name: Model_UpdateWeights
583be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelUpdateWeights function.
584be168c0dSopenharmony_ci * @tc.type: FUNC
585be168c0dSopenharmony_ci */
586be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_UpdateWeights, testing::ext::TestSize.Level0) {
587be168c0dSopenharmony_ci    printf("==========OH_AI_ContextCreate==========\n");
588be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
589be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
590be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
591be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate==========\n");
592be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
593be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
594be168c0dSopenharmony_ci
595be168c0dSopenharmony_ci    printf("==========OH_AI_TrainCfgCreate==========\n");
596be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle train_cfg = OH_AI_TrainCfgCreate();
597be168c0dSopenharmony_ci    ASSERT_NE(train_cfg, nullptr);
598be168c0dSopenharmony_ci    printf("==========OH_AI_TrainModelBuildFromFile==========\n");
599be168c0dSopenharmony_ci    auto status = OH_AI_TrainModelBuildFromFile(model, "/data/test/resource/lenet_train.ms", OH_AI_MODELTYPE_MINDIR,
600be168c0dSopenharmony_ci                                                context, train_cfg);
601be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
602be168c0dSopenharmony_ci
603be168c0dSopenharmony_ci    auto genRandomData = [](size_t size, void *data) {
604be168c0dSopenharmony_ci        auto generator = std::uniform_real_distribution<float>(0.0f, 1.0f);
605be168c0dSopenharmony_ci        std::mt19937 randomEngine;
606be168c0dSopenharmony_ci        size_t elementsNum = size / sizeof(float);
607be168c0dSopenharmony_ci        (void)std::generate_n(static_cast<float *>(data), elementsNum,
608be168c0dSopenharmony_ci                              [&]() { return static_cast<float>(generator(randomEngine)); });
609be168c0dSopenharmony_ci    };
610be168c0dSopenharmony_ci    std::vector<OH_AI_TensorHandle> vec_inputs;
611be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 1;
612be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {10};
613be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("fc3.bias", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
614be168c0dSopenharmony_ci                                                   createShapeNum, nullptr, 0);
615be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
616be168c0dSopenharmony_ci    genRandomData(OH_AI_TensorGetDataSize(tensor), OH_AI_TensorGetMutableData(tensor));
617be168c0dSopenharmony_ci    vec_inputs.push_back(tensor);
618be168c0dSopenharmony_ci
619be168c0dSopenharmony_ci    OH_AI_TensorHandleArray update_weights = {1, vec_inputs.data()};
620be168c0dSopenharmony_ci    status = OH_AI_ModelUpdateWeights(model, update_weights);
621be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
622be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
623be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
624be168c0dSopenharmony_ci    ASSERT_NE(inputs.handle_list, nullptr);
625be168c0dSopenharmony_ci    FillInputsData(inputs, "lenet_train", false);
626be168c0dSopenharmony_ci    status = OH_AI_ModelSetTrainMode(model, true);
627be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
628be168c0dSopenharmony_ci    printf("==========Model RunStep==========\n");
629be168c0dSopenharmony_ci    status = OH_AI_RunStep(model, nullptr, nullptr);
630be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
631be168c0dSopenharmony_ci
632be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
633be168c0dSopenharmony_ci}
634be168c0dSopenharmony_ci
635be168c0dSopenharmony_ci/*
636be168c0dSopenharmony_ci * @tc.name: Model_GetWeights
637be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelGetWeights function.
638be168c0dSopenharmony_ci * @tc.type: FUNC
639be168c0dSopenharmony_ci */
640be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_GetWeights, testing::ext::TestSize.Level0) {
641be168c0dSopenharmony_ci    printf("==========OH_AI_ContextCreate==========\n");
642be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
643be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
644be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
645be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate==========\n");
646be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
647be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
648be168c0dSopenharmony_ci    printf("==========OH_AI_TrainCfgCreate==========\n");
649be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle train_cfg = OH_AI_TrainCfgCreate();
650be168c0dSopenharmony_ci    ASSERT_NE(train_cfg, nullptr);
651be168c0dSopenharmony_ci    printf("==========OH_AI_TrainModelBuildFromFile==========\n");
652be168c0dSopenharmony_ci    auto status = OH_AI_TrainModelBuildFromFile(model, "/data/test/resource/lenet_train.ms", OH_AI_MODELTYPE_MINDIR,
653be168c0dSopenharmony_ci                                                context, train_cfg);
654be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
655be168c0dSopenharmony_ci    OH_AI_TensorHandleArray get_update_weights = OH_AI_ModelGetWeights(model);
656be168c0dSopenharmony_ci    for (size_t i = 0; i < get_update_weights.handle_num; ++i) {
657be168c0dSopenharmony_ci        OH_AI_TensorHandle weights_tensor = get_update_weights.handle_list[i];
658be168c0dSopenharmony_ci        if (strcmp(OH_AI_TensorGetName(weights_tensor), "fc3.bias") == 0) {
659be168c0dSopenharmony_ci            float *inputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(weights_tensor));
660be168c0dSopenharmony_ci            printf("fc3.bias: %f", inputData[0]);
661be168c0dSopenharmony_ci        }
662be168c0dSopenharmony_ci    }
663be168c0dSopenharmony_ci    auto genRandomData = [](size_t size, void *data) {
664be168c0dSopenharmony_ci        auto generator = std::uniform_real_distribution<float>(0.0f, 1.0f);
665be168c0dSopenharmony_ci        std::mt19937 randomEngine;
666be168c0dSopenharmony_ci        size_t elementsNum = size / sizeof(float);
667be168c0dSopenharmony_ci        (void)std::generate_n(static_cast<float *>(data), elementsNum,
668be168c0dSopenharmony_ci                              [&]() { return static_cast<float>(generator(randomEngine)); });
669be168c0dSopenharmony_ci    };
670be168c0dSopenharmony_ci    std::vector<OH_AI_TensorHandle> vec_inputs;
671be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 1;
672be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {10};
673be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("fc3.bias", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
674be168c0dSopenharmony_ci                                                   createShapeNum, nullptr, 0);
675be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
676be168c0dSopenharmony_ci    genRandomData(OH_AI_TensorGetDataSize(tensor), OH_AI_TensorGetMutableData(tensor));
677be168c0dSopenharmony_ci    vec_inputs.push_back(tensor);
678be168c0dSopenharmony_ci    OH_AI_TensorHandleArray update_weights = {1, vec_inputs.data()};
679be168c0dSopenharmony_ci    status = OH_AI_ModelUpdateWeights(model, update_weights);
680be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
681be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
682be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
683be168c0dSopenharmony_ci    ASSERT_NE(inputs.handle_list, nullptr);
684be168c0dSopenharmony_ci    FillInputsData(inputs, "lenet_train", false);
685be168c0dSopenharmony_ci    status = OH_AI_ModelSetTrainMode(model, true);
686be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
687be168c0dSopenharmony_ci    printf("==========Model RunStep==========\n");
688be168c0dSopenharmony_ci    status = OH_AI_RunStep(model, nullptr, nullptr);
689be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
690be168c0dSopenharmony_ci    printf("==========OH_AI_ExportModel==========\n");
691be168c0dSopenharmony_ci    status = OH_AI_ExportModel(model, OH_AI_MODELTYPE_MINDIR, "/data/test/resource/lenet_train_infer.ms",
692be168c0dSopenharmony_ci                               OH_AI_NO_QUANT, true, nullptr, 0);
693be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
694be168c0dSopenharmony_ci    OH_AI_TensorHandleArray export_update_weights = OH_AI_ModelGetWeights(model);
695be168c0dSopenharmony_ci    for (size_t i = 0; i < export_update_weights.handle_num; ++i) {
696be168c0dSopenharmony_ci        OH_AI_TensorHandle weights_tensor = export_update_weights.handle_list[i];
697be168c0dSopenharmony_ci        if (strcmp(OH_AI_TensorGetName(weights_tensor), "fc3.bias") == 0) {
698be168c0dSopenharmony_ci            float *inputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(weights_tensor));
699be168c0dSopenharmony_ci            printf("fc3.bias: %f", inputData[0]);
700be168c0dSopenharmony_ci        }
701be168c0dSopenharmony_ci    }
702be168c0dSopenharmony_ci
703be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
704be168c0dSopenharmony_ci}
705be168c0dSopenharmony_ci
706be168c0dSopenharmony_ci/*
707be168c0dSopenharmony_ci * @tc.name: Model_SetupVirtualBatch
708be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ModelSetupVirtualBatch/OH_AI_ExportModelBuffer function.
709be168c0dSopenharmony_ci * @tc.type: FUNC
710be168c0dSopenharmony_ci */
711be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_SetupVirtualBatch, testing::ext::TestSize.Level0) {
712be168c0dSopenharmony_ci    printf("==========OH_AI_ContextCreate==========\n");
713be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
714be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
715be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
716be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate==========\n");
717be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
718be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
719be168c0dSopenharmony_ci    printf("==========OH_AI_TrainCfgCreate==========\n");
720be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle train_cfg = OH_AI_TrainCfgCreate();
721be168c0dSopenharmony_ci    ASSERT_NE(train_cfg, nullptr);
722be168c0dSopenharmony_ci
723be168c0dSopenharmony_ci    printf("==========OH_AI_TrainModelBuildFromFile==========\n");
724be168c0dSopenharmony_ci    auto status = OH_AI_TrainModelBuildFromFile(model, "/data/test/resource/lenet_train.ms", OH_AI_MODELTYPE_MINDIR,
725be168c0dSopenharmony_ci                                                context, train_cfg);
726be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
727be168c0dSopenharmony_ci    status = OH_AI_ModelSetupVirtualBatch(model, 2, -1.0f, -1.0f);
728be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
729be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
730be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
731be168c0dSopenharmony_ci    ASSERT_NE(inputs.handle_list, nullptr);
732be168c0dSopenharmony_ci    FillInputsData(inputs, "lenet_train", false);
733be168c0dSopenharmony_ci    status = OH_AI_ModelSetTrainMode(model, true);
734be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
735be168c0dSopenharmony_ci    bool trainMode = OH_AI_ModelGetTrainMode(model);
736be168c0dSopenharmony_ci    printf("get train mode: %d\n", trainMode);
737be168c0dSopenharmony_ci    ASSERT_EQ(trainMode, true);
738be168c0dSopenharmony_ci
739be168c0dSopenharmony_ci    printf("==========Model RunStep==========\n");
740be168c0dSopenharmony_ci    status = OH_AI_RunStep(model, nullptr, nullptr);
741be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
742be168c0dSopenharmony_ci    printf("==========OH_AI_ExportModelBuffer==========\n");
743be168c0dSopenharmony_ci    char *modelBuffer;
744be168c0dSopenharmony_ci    size_t modelSize = 0;
745be168c0dSopenharmony_ci    status = OH_AI_ExportModelBuffer(model, OH_AI_MODELTYPE_MINDIR, &modelBuffer, &modelSize, OH_AI_NO_QUANT, true,
746be168c0dSopenharmony_ci                                     nullptr, 0);
747be168c0dSopenharmony_ci    printf("export model buffer size: %zu\n", modelSize);
748be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
749be168c0dSopenharmony_ci    ASSERT_NE(modelBuffer, nullptr);
750be168c0dSopenharmony_ci
751be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
752be168c0dSopenharmony_ci    free(modelBuffer);
753be168c0dSopenharmony_ci}
754be168c0dSopenharmony_ci
755be168c0dSopenharmony_ci/*
756be168c0dSopenharmony_ci * @tc.name: Model_ExportWeights
757be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_ExportWeightsCollaborateWithMicro function.
758be168c0dSopenharmony_ci * @tc.type: FUNC
759be168c0dSopenharmony_ci */
760be168c0dSopenharmony_ciHWTEST(MSLiteTest, Model_ExportWeights, testing::ext::TestSize.Level0) {
761be168c0dSopenharmony_ci    printf("==========OH_AI_ContextCreate==========\n");
762be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
763be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
764be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
765be168c0dSopenharmony_ci    printf("==========OH_AI_ModelCreate==========\n");
766be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
767be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
768be168c0dSopenharmony_ci    printf("==========OH_AI_TrainCfgCreate==========\n");
769be168c0dSopenharmony_ci    OH_AI_TrainCfgHandle train_cfg = OH_AI_TrainCfgCreate();
770be168c0dSopenharmony_ci    ASSERT_NE(train_cfg, nullptr);
771be168c0dSopenharmony_ci
772be168c0dSopenharmony_ci    printf("==========OH_AI_TrainModelBuildFromFile==========\n");
773be168c0dSopenharmony_ci    auto status = OH_AI_TrainModelBuildFromFile(model, "/data/test/resource/xiaoyi_train_codegen.ms",
774be168c0dSopenharmony_ci                                                OH_AI_MODELTYPE_MINDIR, context, train_cfg);
775be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
776be168c0dSopenharmony_ci    printf("==========OH_AI_ExportModel==========\n");
777be168c0dSopenharmony_ci    status = OH_AI_ExportModel(model, OH_AI_MODELTYPE_MINDIR, "/data/test/resource/xiaoyi_train_codegen_gru_model1.ms",
778be168c0dSopenharmony_ci                               OH_AI_NO_QUANT, true, nullptr, 0);
779be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
780be168c0dSopenharmony_ci    status = OH_AI_ExportWeightsCollaborateWithMicro(model, OH_AI_MODELTYPE_MINDIR,
781be168c0dSopenharmony_ci                                                     "/data/test/resource/xiaoyi_train_codegen_net1.bin", true, true,
782be168c0dSopenharmony_ci                                                     nullptr, 0);
783be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
784be168c0dSopenharmony_ci    status = OH_AI_ExportWeightsCollaborateWithMicro(model, OH_AI_MODELTYPE_MINDIR,
785be168c0dSopenharmony_ci                                                     "/data/test/resource/xiaoyi_train_codegen_net1_fp32.bin", true,
786be168c0dSopenharmony_ci                                                     false, nullptr, 0);
787be168c0dSopenharmony_ci    ASSERT_EQ(status, OH_AI_STATUS_SUCCESS);
788be168c0dSopenharmony_ci
789be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
790be168c0dSopenharmony_ci}
791be168c0dSopenharmony_ci
792be168c0dSopenharmony_ci/*
793be168c0dSopenharmony_ci * @tc.name: Tensor_Create
794be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorCreate function.
795be168c0dSopenharmony_ci * @tc.type: FUNC
796be168c0dSopenharmony_ci */
797be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_Create, testing::ext::TestSize.Level0) {
798be168c0dSopenharmony_ci    printf("==========Init Context==========\n");
799be168c0dSopenharmony_ci    OH_AI_ContextHandle context = OH_AI_ContextCreate();
800be168c0dSopenharmony_ci    ASSERT_NE(context, nullptr);
801be168c0dSopenharmony_ci    AddContextDeviceCPU(context);
802be168c0dSopenharmony_ci    printf("==========Create model==========\n");
803be168c0dSopenharmony_ci    OH_AI_ModelHandle model = OH_AI_ModelCreate();
804be168c0dSopenharmony_ci    ASSERT_NE(model, nullptr);
805be168c0dSopenharmony_ci    printf("==========Build model==========\n");
806be168c0dSopenharmony_ci    OH_AI_Status ret = OH_AI_ModelBuildFromFile(model, "/data/test/resource/ml_face_isface.ms", OH_AI_MODELTYPE_MINDIR,
807be168c0dSopenharmony_ci                                                context);
808be168c0dSopenharmony_ci    printf("==========build model return code:%d\n", ret);
809be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
810be168c0dSopenharmony_ci    printf("==========GetInputs==========\n");
811be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
812be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
813be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
814be168c0dSopenharmony_ci                                                   createShapeNum, nullptr, 0);
815be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
816be168c0dSopenharmony_ci    OH_AI_TensorHandleArray inputs = OH_AI_ModelGetInputs(model);
817be168c0dSopenharmony_ci    inputs.handle_list[0] = tensor;
818be168c0dSopenharmony_ci    FillInputsData(inputs, "ml_face_isface", true);
819be168c0dSopenharmony_ci    printf("==========Model Predict==========\n");
820be168c0dSopenharmony_ci    OH_AI_TensorHandleArray outputs;
821be168c0dSopenharmony_ci    ret = OH_AI_ModelPredict(model, inputs, &outputs, nullptr, nullptr);
822be168c0dSopenharmony_ci    ASSERT_EQ(ret, OH_AI_STATUS_SUCCESS);
823be168c0dSopenharmony_ci    CompareResult(outputs, "ml_face_isface");
824be168c0dSopenharmony_ci    OH_AI_ModelDestroy(&model);
825be168c0dSopenharmony_ci}
826be168c0dSopenharmony_ci
827be168c0dSopenharmony_ci/*
828be168c0dSopenharmony_ci * @tc.name: Tensor_Destroy
829be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorDestroy function.
830be168c0dSopenharmony_ci * @tc.type: FUNC
831be168c0dSopenharmony_ci */
832be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_Destroy, testing::ext::TestSize.Level0) {
833be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
834be168c0dSopenharmony_ci    size_t size1;
835be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
836be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
837be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
838be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
839be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
840be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
841be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
842be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
843be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
844be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
845be168c0dSopenharmony_ci    delete[] imageBuf;
846be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
847be168c0dSopenharmony_ci    ASSERT_EQ(tensor, nullptr);
848be168c0dSopenharmony_ci}
849be168c0dSopenharmony_ci
850be168c0dSopenharmony_ci/*
851be168c0dSopenharmony_ci * @tc.name: Tensor_Clone
852be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorClone function.
853be168c0dSopenharmony_ci * @tc.type: FUNC
854be168c0dSopenharmony_ci */
855be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_Clone, testing::ext::TestSize.Level0) {
856be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
857be168c0dSopenharmony_ci    size_t size1;
858be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
859be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
860be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
861be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
862be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
863be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
864be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
865be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
866be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
867be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
868be168c0dSopenharmony_ci    OH_AI_TensorHandle clone = OH_AI_TensorClone(tensor);
869be168c0dSopenharmony_ci    ASSERT_NE(clone, nullptr);
870be168c0dSopenharmony_ci    ASSERT_EQ(strcmp(OH_AI_TensorGetName(clone), "data_duplicate"), 0);
871be168c0dSopenharmony_ci    delete[] imageBuf;
872be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
873be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&clone);
874be168c0dSopenharmony_ci}
875be168c0dSopenharmony_ci
876be168c0dSopenharmony_ci/*
877be168c0dSopenharmony_ci * @tc.name: Tensor_GetName
878be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetName function.
879be168c0dSopenharmony_ci * @tc.type: FUNC
880be168c0dSopenharmony_ci */
881be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetName, testing::ext::TestSize.Level0) {
882be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
883be168c0dSopenharmony_ci    size_t size1;
884be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
885be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
886be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
887be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
888be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
889be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
890be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
891be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
892be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
893be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
894be168c0dSopenharmony_ci    const char *tensorName = OH_AI_TensorGetName(tensor);
895be168c0dSopenharmony_ci    ASSERT_EQ(strcmp(tensorName, "data"), 0);
896be168c0dSopenharmony_ci    delete[] imageBuf;
897be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
898be168c0dSopenharmony_ci}
899be168c0dSopenharmony_ci
900be168c0dSopenharmony_ci/*
901be168c0dSopenharmony_ci * @tc.name: Tensor_SetName
902be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorSetName function.
903be168c0dSopenharmony_ci * @tc.type: FUNC
904be168c0dSopenharmony_ci */
905be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_SetName, testing::ext::TestSize.Level0) {
906be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
907be168c0dSopenharmony_ci    size_t size1;
908be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
909be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
910be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
911be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
912be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
913be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
914be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
915be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
916be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
917be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
918be168c0dSopenharmony_ci    OH_AI_TensorSetName(tensor, "new_data");
919be168c0dSopenharmony_ci    const char *tensorName = OH_AI_TensorGetName(tensor);
920be168c0dSopenharmony_ci    ASSERT_EQ(strcmp(tensorName, "new_data"), 0);
921be168c0dSopenharmony_ci    delete[] imageBuf;
922be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
923be168c0dSopenharmony_ci}
924be168c0dSopenharmony_ci
925be168c0dSopenharmony_ci/*
926be168c0dSopenharmony_ci * @tc.name: Tensor_GetDataType
927be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetDataType function.
928be168c0dSopenharmony_ci * @tc.type: FUNC
929be168c0dSopenharmony_ci */
930be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetDataType, testing::ext::TestSize.Level0) {
931be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
932be168c0dSopenharmony_ci    size_t size1;
933be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
934be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
935be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
936be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
937be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
938be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
939be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
940be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
941be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
942be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
943be168c0dSopenharmony_ci    OH_AI_DataType data_type = OH_AI_TensorGetDataType(tensor);
944be168c0dSopenharmony_ci    ASSERT_EQ(data_type, OH_AI_DATATYPE_NUMBERTYPE_FLOAT32);
945be168c0dSopenharmony_ci    delete[] imageBuf;
946be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
947be168c0dSopenharmony_ci}
948be168c0dSopenharmony_ci
949be168c0dSopenharmony_ci/*
950be168c0dSopenharmony_ci * @tc.name: Tensor_SetDataType
951be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorSetDataType function.
952be168c0dSopenharmony_ci * @tc.type: FUNC
953be168c0dSopenharmony_ci */
954be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_SetDataType, testing::ext::TestSize.Level0) {
955be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
956be168c0dSopenharmony_ci    size_t size1;
957be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
958be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
959be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
960be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
961be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
962be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
963be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
964be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
965be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
966be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
967be168c0dSopenharmony_ci    OH_AI_TensorSetDataType(tensor, OH_AI_DATATYPE_NUMBERTYPE_FLOAT16);
968be168c0dSopenharmony_ci    OH_AI_DataType data_type = OH_AI_TensorGetDataType(tensor);
969be168c0dSopenharmony_ci    ASSERT_EQ(data_type, OH_AI_DATATYPE_NUMBERTYPE_FLOAT16);
970be168c0dSopenharmony_ci    delete[] imageBuf;
971be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
972be168c0dSopenharmony_ci}
973be168c0dSopenharmony_ci
974be168c0dSopenharmony_ci/*
975be168c0dSopenharmony_ci * @tc.name: Tensor_GetShape
976be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetShape function.
977be168c0dSopenharmony_ci * @tc.type: FUNC
978be168c0dSopenharmony_ci */
979be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetShape, testing::ext::TestSize.Level0) {
980be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
981be168c0dSopenharmony_ci    size_t size1;
982be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
983be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
984be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
985be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
986be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
987be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
988be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
989be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
990be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
991be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
992be168c0dSopenharmony_ci    size_t retShapeNum;
993be168c0dSopenharmony_ci    const int64_t *retShape = OH_AI_TensorGetShape(tensor, &retShapeNum);
994be168c0dSopenharmony_ci    ASSERT_EQ(retShapeNum, createShapeNum);
995be168c0dSopenharmony_ci    for (size_t i = 0; i < retShapeNum; i++) {
996be168c0dSopenharmony_ci        ASSERT_EQ(retShape[i], createShape[i]);
997be168c0dSopenharmony_ci    }
998be168c0dSopenharmony_ci    delete[] imageBuf;
999be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1000be168c0dSopenharmony_ci}
1001be168c0dSopenharmony_ci
1002be168c0dSopenharmony_ci/*
1003be168c0dSopenharmony_ci * @tc.name: Tensor_SetShape
1004be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorSetShape function.
1005be168c0dSopenharmony_ci * @tc.type: FUNC
1006be168c0dSopenharmony_ci */
1007be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_SetShape, testing::ext::TestSize.Level0) {
1008be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1009be168c0dSopenharmony_ci    size_t size1;
1010be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1011be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1012be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1013be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1014be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1015be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1016be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1017be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1018be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1019be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1020be168c0dSopenharmony_ci    size_t retShapeNum;
1021be168c0dSopenharmony_ci    const int64_t *retShape = OH_AI_TensorGetShape(tensor, &retShapeNum);
1022be168c0dSopenharmony_ci    ASSERT_EQ(retShapeNum, createShapeNum);
1023be168c0dSopenharmony_ci    for (size_t i = 0; i < retShapeNum; i++) {
1024be168c0dSopenharmony_ci        ASSERT_EQ(retShape[i], createShape[i]);
1025be168c0dSopenharmony_ci    }
1026be168c0dSopenharmony_ci    constexpr size_t newShapeNum = 4;
1027be168c0dSopenharmony_ci    int64_t newShape[newShapeNum] = {1, 32, 32, 1};
1028be168c0dSopenharmony_ci    OH_AI_TensorSetShape(tensor, newShape, newShapeNum);
1029be168c0dSopenharmony_ci    size_t newRetShapeNum;
1030be168c0dSopenharmony_ci    const int64_t *newRetShape = OH_AI_TensorGetShape(tensor, &newRetShapeNum);
1031be168c0dSopenharmony_ci    ASSERT_EQ(newRetShapeNum, newShapeNum);
1032be168c0dSopenharmony_ci    for (size_t i = 0; i < newRetShapeNum; i++) {
1033be168c0dSopenharmony_ci        ASSERT_EQ(newRetShape[i], newShape[i]);
1034be168c0dSopenharmony_ci    }
1035be168c0dSopenharmony_ci    delete[] imageBuf;
1036be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1037be168c0dSopenharmony_ci}
1038be168c0dSopenharmony_ci
1039be168c0dSopenharmony_ci/*
1040be168c0dSopenharmony_ci * @tc.name: Tensor_GetFormat
1041be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetFormat function.
1042be168c0dSopenharmony_ci * @tc.type: FUNC
1043be168c0dSopenharmony_ci */
1044be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetFormat, testing::ext::TestSize.Level0) {
1045be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1046be168c0dSopenharmony_ci    size_t size1;
1047be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1048be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1049be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1050be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1051be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1052be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1053be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1054be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1055be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1056be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1057be168c0dSopenharmony_ci    OH_AI_Format data_format = OH_AI_TensorGetFormat(tensor);
1058be168c0dSopenharmony_ci    ASSERT_EQ(data_format, OH_AI_FORMAT_NHWC);
1059be168c0dSopenharmony_ci    delete[] imageBuf;
1060be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1061be168c0dSopenharmony_ci}
1062be168c0dSopenharmony_ci
1063be168c0dSopenharmony_ci/*
1064be168c0dSopenharmony_ci * @tc.name: Tensor_SetFormat
1065be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorSetFormat function.
1066be168c0dSopenharmony_ci * @tc.type: FUNC
1067be168c0dSopenharmony_ci */
1068be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_SetFormat, testing::ext::TestSize.Level0) {
1069be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1070be168c0dSopenharmony_ci    size_t size1;
1071be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1072be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1073be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1074be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1075be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1076be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1077be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1078be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1079be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1080be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1081be168c0dSopenharmony_ci    OH_AI_TensorSetFormat(tensor, OH_AI_FORMAT_NCHW);
1082be168c0dSopenharmony_ci    OH_AI_Format data_format = OH_AI_TensorGetFormat(tensor);
1083be168c0dSopenharmony_ci    ASSERT_EQ(data_format, OH_AI_FORMAT_NCHW);
1084be168c0dSopenharmony_ci    delete[] imageBuf;
1085be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1086be168c0dSopenharmony_ci}
1087be168c0dSopenharmony_ci
1088be168c0dSopenharmony_ci/*
1089be168c0dSopenharmony_ci * @tc.name: Tensor_GetData
1090be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetData function.
1091be168c0dSopenharmony_ci * @tc.type: FUNC
1092be168c0dSopenharmony_ci */
1093be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetData, testing::ext::TestSize.Level0) {
1094be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1095be168c0dSopenharmony_ci    size_t size1;
1096be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1097be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1098be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1099be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1100be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1101be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1102be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1103be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1104be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1105be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1106be168c0dSopenharmony_ci    const float *retData = static_cast<const float *>(OH_AI_TensorGetData(tensor));
1107be168c0dSopenharmony_ci    ASSERT_NE(retData, nullptr);
1108be168c0dSopenharmony_ci    printf("return data is: ");
1109be168c0dSopenharmony_ci    constexpr int printNum = 20;
1110be168c0dSopenharmony_ci    for (int i = 0; i < printNum; ++i) {
1111be168c0dSopenharmony_ci        printf("%f ", retData[i]);
1112be168c0dSopenharmony_ci    }
1113be168c0dSopenharmony_ci    printf("\n");
1114be168c0dSopenharmony_ci    delete[] imageBuf;
1115be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1116be168c0dSopenharmony_ci}
1117be168c0dSopenharmony_ci
1118be168c0dSopenharmony_ci/*
1119be168c0dSopenharmony_ci * @tc.name: Tensor_SetData
1120be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorSetData function.
1121be168c0dSopenharmony_ci * @tc.type: FUNC
1122be168c0dSopenharmony_ci */
1123be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_SetData, testing::ext::TestSize.Level0) {
1124be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1125be168c0dSopenharmony_ci    size_t size1;
1126be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1127be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1128be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1129be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1130be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1131be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1132be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1133be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1134be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1135be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1136be168c0dSopenharmony_ci    constexpr size_t dataLen = 6;
1137be168c0dSopenharmony_ci    float data[dataLen] = {1, 2, 3, 4, 5, 6};
1138be168c0dSopenharmony_ci    OH_AI_TensorSetData(tensor, data);
1139be168c0dSopenharmony_ci    const float *retData = static_cast<const float *>(OH_AI_TensorGetData(tensor));
1140be168c0dSopenharmony_ci    ASSERT_NE(retData, nullptr);
1141be168c0dSopenharmony_ci    printf("return data is:");
1142be168c0dSopenharmony_ci    for (size_t i = 0; i < dataLen; i++) {
1143be168c0dSopenharmony_ci        ASSERT_EQ(retData[i], data[i]);
1144be168c0dSopenharmony_ci        printf("%f ", retData[i]);
1145be168c0dSopenharmony_ci    }
1146be168c0dSopenharmony_ci    printf("\n");
1147be168c0dSopenharmony_ci    delete[] imageBuf;
1148be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1149be168c0dSopenharmony_ci}
1150be168c0dSopenharmony_ci
1151be168c0dSopenharmony_ci/*
1152be168c0dSopenharmony_ci * @tc.name: Tensor_SetUserData
1153be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorSetData function.
1154be168c0dSopenharmony_ci * @tc.type: FUNC
1155be168c0dSopenharmony_ci */
1156be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_SetUserData, testing::ext::TestSize.Level0) {
1157be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1158be168c0dSopenharmony_ci    size_t size1;
1159be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1160be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1161be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1162be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1163be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1164be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1165be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1166be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1167be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1168be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1169be168c0dSopenharmony_ci    float *inputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(tensor));
1170be168c0dSopenharmony_ci    constexpr size_t dataLen = 6;
1171be168c0dSopenharmony_ci    float data[dataLen] = {1, 2, 3, 4, 5, 6};
1172be168c0dSopenharmony_ci    for (size_t i = 0; i < dataLen; i++) {
1173be168c0dSopenharmony_ci        inputData[i] = data[i];
1174be168c0dSopenharmony_ci    }
1175be168c0dSopenharmony_ci
1176be168c0dSopenharmony_ci    OH_AI_TensorSetUserData(tensor, inputData, size1);
1177be168c0dSopenharmony_ci    const float *retData = static_cast<const float *>(OH_AI_TensorGetData(tensor));
1178be168c0dSopenharmony_ci    ASSERT_NE(retData, nullptr);
1179be168c0dSopenharmony_ci    printf("return data is:");
1180be168c0dSopenharmony_ci    for (size_t i = 0; i < dataLen; i++) {
1181be168c0dSopenharmony_ci        ASSERT_EQ(retData[i], data[i]);
1182be168c0dSopenharmony_ci        printf("%f ", retData[i]);
1183be168c0dSopenharmony_ci    }
1184be168c0dSopenharmony_ci    printf("\n");
1185be168c0dSopenharmony_ci    delete[] imageBuf;
1186be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1187be168c0dSopenharmony_ci}
1188be168c0dSopenharmony_ci
1189be168c0dSopenharmony_ci/*
1190be168c0dSopenharmony_ci * @tc.name: Tensor_GetElementNum
1191be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetElementNum function.
1192be168c0dSopenharmony_ci * @tc.type: FUNC
1193be168c0dSopenharmony_ci */
1194be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetElementNum, testing::ext::TestSize.Level0) {
1195be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1196be168c0dSopenharmony_ci    size_t size1;
1197be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1198be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1199be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1200be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1201be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1202be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1203be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1204be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1205be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1206be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1207be168c0dSopenharmony_ci    int64_t elementNum = OH_AI_TensorGetElementNum(tensor);
1208be168c0dSopenharmony_ci    printf("Tensor name: %s, elements num: %" PRId64 ".\n", OH_AI_TensorGetName(tensor), elementNum);
1209be168c0dSopenharmony_ci    ASSERT_EQ(elementNum, 6912);
1210be168c0dSopenharmony_ci    delete[] imageBuf;
1211be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1212be168c0dSopenharmony_ci}
1213be168c0dSopenharmony_ci
1214be168c0dSopenharmony_ci/*
1215be168c0dSopenharmony_ci * @tc.name: Tensor_GetDataSize
1216be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetDataSize function.
1217be168c0dSopenharmony_ci * @tc.type: FUNC
1218be168c0dSopenharmony_ci */
1219be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetDataSize, testing::ext::TestSize.Level0) {
1220be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1221be168c0dSopenharmony_ci    size_t size1;
1222be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1223be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1224be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1225be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1226be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1227be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1228be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1229be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1230be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1231be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1232be168c0dSopenharmony_ci    size_t dataSize = OH_AI_TensorGetDataSize(tensor);
1233be168c0dSopenharmony_ci    printf("Tensor data size: %zu.\n", dataSize);
1234be168c0dSopenharmony_ci    ASSERT_EQ(dataSize, 6912 * sizeof(float));
1235be168c0dSopenharmony_ci    delete[] imageBuf;
1236be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1237be168c0dSopenharmony_ci}
1238be168c0dSopenharmony_ci
1239be168c0dSopenharmony_ci/*
1240be168c0dSopenharmony_ci * @tc.name: Tensor_GetMutableData
1241be168c0dSopenharmony_ci * @tc.desc: Verify the OH_AI_TensorGetMutableData function.
1242be168c0dSopenharmony_ci * @tc.type: FUNC
1243be168c0dSopenharmony_ci */
1244be168c0dSopenharmony_ciHWTEST(MSLiteTest, Tensor_GetMutableData, testing::ext::TestSize.Level0) {
1245be168c0dSopenharmony_ci    printf("==========ReadFile==========\n");
1246be168c0dSopenharmony_ci    size_t size1;
1247be168c0dSopenharmony_ci    size_t *ptrSize1 = &size1;
1248be168c0dSopenharmony_ci    const char *imagePath = "/data/test/resource/ml_face_isface.input";
1249be168c0dSopenharmony_ci    char *imageBuf = ReadFile(imagePath, ptrSize1);
1250be168c0dSopenharmony_ci    ASSERT_NE(imageBuf, nullptr);
1251be168c0dSopenharmony_ci    printf("==========OH_AI_TensorCreate==========\n");
1252be168c0dSopenharmony_ci    constexpr size_t createShapeNum = 4;
1253be168c0dSopenharmony_ci    int64_t createShape[createShapeNum] = {1, 48, 48, 3};
1254be168c0dSopenharmony_ci    OH_AI_TensorHandle tensor = OH_AI_TensorCreate("data", OH_AI_DATATYPE_NUMBERTYPE_FLOAT32, createShape,
1255be168c0dSopenharmony_ci                                                   createShapeNum, imageBuf, size1);
1256be168c0dSopenharmony_ci    ASSERT_NE(tensor, nullptr);
1257be168c0dSopenharmony_ci    float *inputData = reinterpret_cast<float *>(OH_AI_TensorGetMutableData(tensor));
1258be168c0dSopenharmony_ci    ASSERT_NE(inputData, nullptr);
1259be168c0dSopenharmony_ci    delete[] imageBuf;
1260be168c0dSopenharmony_ci    OH_AI_TensorDestroy(&tensor);
1261be168c0dSopenharmony_ci}
1262