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