From: Shobhit Verma Date: Tue, 18 Apr 2023 09:31:03 +0000 (+0530) Subject: [ITC][nnstreamer][ACR-1755] Added new TCs for new extended tensor API X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d9b491b77cd43b3211a08ea57f9f976a8941efd4;p=test%2Ftct%2Fnative%2Fapi.git [ITC][nnstreamer][ACR-1755] Added new TCs for new extended tensor API Change-Id: I00a550ea71b6301ab36854056fdca958cfe73773 Signed-off-by: Shobhit Verma --- diff --git a/src/itc/nnstreamer/ITs-nnstreamer-single.c b/src/itc/nnstreamer/ITs-nnstreamer-single.c old mode 100644 new mode 100755 index f05b9b6a6..a47922d9e --- a/src/itc/nnstreamer/ITs-nnstreamer-single.c +++ b/src/itc/nnstreamer/ITs-nnstreamer-single.c @@ -924,5 +924,119 @@ int ITc_nnstreamer_single_ml_single_open_with_option_p(void) return 0; } + + +/* +* @testcase ITc_nnstreamer_single_invoke_with_extended_p +* @since_tizen 7.5 +* @author SRID(shobhit.v) +* @reviewer SRID(utk.tiwari) +* @type auto +* @description To check NNStreamer invoke with extended model +* @scenario To check NNStreamer invoke with extended model +* @apicovered ml_single_invoke_fast +* @passcase When ml_single_invoke_fast and precondition API is successful. +* @failcase If target API fails or any precondition API fails +* @precondition None +* @postcondition None +*/ +//& purpose: To check NNStreamer invoke model with preallocated output +//& type: auto +int ITc_nnstreamer_single_invoke_with_extended_p (void) +{ + START_TEST; + + int nRet = -1; + ml_tensors_info_h hInputInfo = NULL; + ml_tensors_info_h hOutputInfo = NULL; + ml_tensors_data_h hInputData = NULL; + ml_tensors_data_h hOutputData = NULL; + ml_tensor_dimension hInputDim = {4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1}; + ml_tensor_dimension hOutputDim = {4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1}; + gchar* TestModel = NULL; + char pszValue[CONFIG_VALUE_LEN_MAX] = {0,}; + char *model_file = "add_extended.tflite"; + char *model_file_path = NULL; + + if ( true == GetValueForTCTSetting("DEVICE_SUITE_TARGET_30", pszValue, API_NAMESPACE )) + { + int model_path_len = strlen(pszValue) + strlen(model_file) + 10; + model_file_path = (char*)malloc(model_path_len); + CHECK_HANDLE(model_file_path, "malloc"); + snprintf(model_file_path, model_path_len, "%s/res/res/%s", pszValue, model_file); + FPRINTF("[%s][%d][%s] %s\\n", __FILE__, __LINE__, __FUNCTION__, model_file_path); + } + + TestModel = model_file_path; + + nRet = ml_tensors_info_create_extended(&hInputInfo); + PRINT_RESULT(ML_ERROR_NONE, nRet, "ml_tensors_info_create_extended", NnStreamerGetError(nRet)); + CHECK_HANDLE(hInputInfo, "ml_tensors_info_create_extended"); + + nRet = ml_tensors_info_create_extended(&hOutputInfo); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_create_extended", NnStreamerGetError(nRet), ml_tensors_info_destroy(hOutputInfo)); + CHECK_HANDLE_CLEANUP(hOutputInfo, "ml_tensors_info_create_extended", ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_count(hInputInfo, 2); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_count", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_tensor_type (hInputInfo, 0, ML_TENSOR_TYPE_FLOAT32); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_tensor_type", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_tensor_dimension (hInputInfo, 0, hInputDim); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_tensor_dimension", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_tensor_type (hInputInfo, 1, ML_TENSOR_TYPE_FLOAT32); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_tensor_type", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_tensor_dimension (hInputInfo, 1, hInputDim); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_tensor_dimension", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_count(hOutputInfo, 1); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_count", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_tensor_type (hOutputInfo, 0, ML_TENSOR_TYPE_FLOAT32); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_tensor_type", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_info_set_tensor_dimension (hOutputInfo, 0, hOutputDim); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_info_set_tensor_dimension", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_single_open(&g_SingleHandle, TestModel, hInputInfo, hOutputInfo, ML_NNFW_TYPE_TENSORFLOW_LITE, ML_NNFW_HW_ANY); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_single_open", NnStreamerGetError(nRet), ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + CHECK_HANDLE_CLEANUP(g_SingleHandle, "ml_single_open", ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + FREE_MEMORY(model_file_path); + + nRet = ml_tensors_data_create(hInputInfo, &hInputData); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_tensors_data_create", NnStreamerGetError(nRet), ml_single_close(g_SingleHandle); ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + CHECK_HANDLE_CLEANUP(hInputData, "ml_tensors_data_create", ml_single_close(g_SingleHandle); ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_single_invoke(g_SingleHandle, hInputData, &hOutputData); + PRINT_RESULT_CLEANUP(ML_ERROR_NONE, nRet, "ml_single_invoke", NnStreamerGetError(nRet), ml_tensors_data_destroy(hInputData); ml_single_close(g_SingleHandle); ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + CHECK_HANDLE_CLEANUP(hOutputData, "ml_single_invoke", ml_tensors_data_destroy(hInputData); ml_single_close(g_SingleHandle); ml_tensors_info_destroy(hInputInfo); ml_tensors_info_destroy(hOutputInfo)); + + nRet = ml_tensors_data_destroy(hOutputData); + PRINT_RESULT_NORETURN(ML_ERROR_NONE, nRet, "ml_tensors_data_destroy", NnStreamerGetError(nRet)); + + nRet = ml_tensors_data_destroy(hInputData); + PRINT_RESULT_NORETURN(ML_ERROR_NONE, nRet, "ml_tensors_data_destroy", NnStreamerGetError(nRet)); + + nRet = ml_single_close(g_SingleHandle); + PRINT_RESULT_NORETURN(ML_ERROR_NONE, nRet, "ml_single_close", NnStreamerGetError(nRet)); + + nRet = ml_tensors_info_destroy(hInputInfo); + PRINT_RESULT_NORETURN(ML_ERROR_NONE, nRet, "ml_tensors_info_destroy", NnStreamerGetError(nRet)); + + nRet = ml_tensors_info_destroy(hOutputInfo); + PRINT_RESULT_NORETURN(ML_ERROR_NONE, nRet, "ml_tensors_info_destroy", NnStreamerGetError(nRet)); + + return 0; +} + + + + + + +/** @} */ /** @} */ -/** @} */ \ No newline at end of file diff --git a/src/itc/nnstreamer/ITs-nnstreamer-tensors.c b/src/itc/nnstreamer/ITs-nnstreamer-tensors.c index 3164f08f7..0f3d60815 100755 --- a/src/itc/nnstreamer/ITs-nnstreamer-tensors.c +++ b/src/itc/nnstreamer/ITs-nnstreamer-tensors.c @@ -595,3 +595,49 @@ int ITc_nnstreamer_tensors_ml_tensors_data_set_get_tensor_data_p(void) PRINT_RESULT_NORETURN(ML_ERROR_NONE, nRet, "ml_tensors_data_destroy", NnStreamerGetError(nRet)); return 0; } + + +/* +* @testcase ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p +* @since_tizen 7.5 +* @author SRID(shobhit.v) +* @reviewer SRID(utk.tiwari) +* @type auto +* @description To test NN Streamer extended info creation +* @scenario To test NN Streamer extended info creation +* @apicovered ml_tensors_info_create_extended +* @passcase When ml_tensors_info_create_extended is successful. +* @failcase If target API fails or any precondition API fails +* @precondition None +* @postcondition None +*/ +//& purpose: API To test NN Streamer extended info creation +//& type: auto +int ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p(void) +{ + START_TEST; + int nRet = -1; + + nRet = ml_tensors_info_create_extended(&g_hTensorsInfoHandle); + PRINT_RESULT(ML_ERROR_NONE, nRet, "ml_tensors_info_create_extended", NnStreamerGetError(nRet)); + CHECK_HANDLE(g_hTensorsInfoHandle, "ml_tensors_info_create_extended"); + + return 0; +} + + + + + + + + + + + + + + + + + diff --git a/src/itc/nnstreamer/res/add_extended.tflite b/src/itc/nnstreamer/res/add_extended.tflite new file mode 100755 index 000000000..4fc02ced6 Binary files /dev/null and b/src/itc/nnstreamer/res/add_extended.tflite differ diff --git a/src/itc/nnstreamer/tct-nnstreamer-native_mobile.h b/src/itc/nnstreamer/tct-nnstreamer-native_mobile.h index 08c907d9b..f47336771 100755 --- a/src/itc/nnstreamer/tct-nnstreamer-native_mobile.h +++ b/src/itc/nnstreamer/tct-nnstreamer-native_mobile.h @@ -92,6 +92,8 @@ extern int ITc_nnstreamer_ml_service_query_create_request_p(void); extern int ITc_nnstreamer_ml_service_model_register_update_description_delete_p(void); extern int ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p(void); extern int ITc_nnstreamer_ml_service_model_getall_activate_p(void); +extern int ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p(void); +extern int ITc_nnstreamer_single_invoke_with_extended_p(void); testcase tc_array[] = { {"ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p", ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p, ITs_nnstreamer_pipeline_startup, ITs_nnstreamer_pipeline_cleanup}, @@ -152,6 +154,8 @@ testcase tc_array[] = { {"ITc_nnstreamer_ml_service_model_register_update_description_delete_p", ITc_nnstreamer_ml_service_model_register_update_description_delete_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, {"ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p", ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, {"ITc_nnstreamer_ml_service_model_getall_activate_p", ITc_nnstreamer_ml_service_model_getall_activate_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, +{"ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p", ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p, ITs_nnstreamer_tensors_startup, ITs_nnstreamer_tensors_cleanup}, +{"ITc_nnstreamer_single_invoke_with_extended_p", ITc_nnstreamer_single_invoke_with_extended_p, ITs_nnstreamer_tensors_single_startup, ITs_nnstreamer_tensors_single_cleanup}, {NULL, NULL} }; diff --git a/src/itc/nnstreamer/tct-nnstreamer-native_tizeniot.h b/src/itc/nnstreamer/tct-nnstreamer-native_tizeniot.h index 4fa60bbae..0c0b6230c 100755 --- a/src/itc/nnstreamer/tct-nnstreamer-native_tizeniot.h +++ b/src/itc/nnstreamer/tct-nnstreamer-native_tizeniot.h @@ -92,6 +92,8 @@ extern int ITc_nnstreamer_ml_service_query_create_request_p(void); extern int ITc_nnstreamer_ml_service_model_register_update_description_delete_p(void); extern int ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p(void); extern int ITc_nnstreamer_ml_service_model_getall_activate_p(void); +extern int ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p(void); +extern int ITc_nnstreamer_single_invoke_with_extended_p(void); testcase tc_array[] = { {"ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p", ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p, ITs_nnstreamer_pipeline_startup, ITs_nnstreamer_pipeline_cleanup}, @@ -152,6 +154,8 @@ testcase tc_array[] = { {"ITc_nnstreamer_ml_service_model_register_update_description_delete_p", ITc_nnstreamer_ml_service_model_register_update_description_delete_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, {"ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p", ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, {"ITc_nnstreamer_ml_service_model_getall_activate_p", ITc_nnstreamer_ml_service_model_getall_activate_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, +{"ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p", ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p, ITs_nnstreamer_tensors_startup, ITs_nnstreamer_tensors_cleanup}, +{"ITc_nnstreamer_single_invoke_with_extended_p", ITc_nnstreamer_single_invoke_with_extended_p, ITs_nnstreamer_tensors_single_startup, ITs_nnstreamer_tensors_single_cleanup}, {NULL, NULL} }; diff --git a/src/itc/nnstreamer/tct-nnstreamer-native_tv.h b/src/itc/nnstreamer/tct-nnstreamer-native_tv.h old mode 100644 new mode 100755 index 3ec711b1e..d36826128 --- a/src/itc/nnstreamer/tct-nnstreamer-native_tv.h +++ b/src/itc/nnstreamer/tct-nnstreamer-native_tv.h @@ -81,6 +81,8 @@ extern int ITc_nnstreamer_pipeline_ml_check_nnfw_availability_full_p(void); extern int ITc_nnstreamer_ml_option_create_destroy_p(void); extern int ITc_nnstreamer_ml_option_set_p(void); extern int ITc_nnstreamer_single_ml_single_open_with_option_p(void); +extern int ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p(void); +extern int ITc_nnstreamer_single_invoke_with_extended_p(void); testcase tc_array[] = { {"ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p", ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p, ITs_nnstreamer_pipeline_startup, ITs_nnstreamer_pipeline_cleanup}, @@ -132,7 +134,9 @@ testcase tc_array[] = { {"ITc_nnstreamer_ml_option_create_destroy_p", ITc_nnstreamer_ml_option_create_destroy_p, ITs_nnstreamer_capi_startup, ITs_nnstreamer_capi_cleanup}, {"ITc_nnstreamer_ml_option_set_p", ITc_nnstreamer_ml_option_set_p, ITs_nnstreamer_capi_startup, ITs_nnstreamer_capi_cleanup}, {"ITc_nnstreamer_single_ml_single_open_with_option_p", ITc_nnstreamer_single_ml_single_open_with_option_p, ITs_nnstreamer_tensors_single_startup, ITs_nnstreamer_tensors_single_cleanup}, - {NULL, NULL} +{"ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p", ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p, ITs_nnstreamer_tensors_startup, ITs_nnstreamer_tensors_cleanup}, +{"ITc_nnstreamer_single_invoke_with_extended_p", ITc_nnstreamer_single_invoke_with_extended_p, ITs_nnstreamer_tensors_single_startup, ITs_nnstreamer_tensors_single_cleanup}, +{NULL, NULL} }; #endif // __TCT_NNSTREAMER-NATIVE_H__ diff --git a/src/itc/nnstreamer/tct-nnstreamer-native_wearable.h b/src/itc/nnstreamer/tct-nnstreamer-native_wearable.h index 2820461dd..0c0b6230c 100755 --- a/src/itc/nnstreamer/tct-nnstreamer-native_wearable.h +++ b/src/itc/nnstreamer/tct-nnstreamer-native_wearable.h @@ -92,7 +92,8 @@ extern int ITc_nnstreamer_ml_service_query_create_request_p(void); extern int ITc_nnstreamer_ml_service_model_register_update_description_delete_p(void); extern int ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p(void); extern int ITc_nnstreamer_ml_service_model_getall_activate_p(void); - +extern int ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p(void); +extern int ITc_nnstreamer_single_invoke_with_extended_p(void); testcase tc_array[] = { {"ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p", ITc_nnstreamer_pipeline_ml_pipeline_construct_destroy_p, ITs_nnstreamer_pipeline_startup, ITs_nnstreamer_pipeline_cleanup}, @@ -153,6 +154,8 @@ testcase tc_array[] = { {"ITc_nnstreamer_ml_service_model_register_update_description_delete_p", ITc_nnstreamer_ml_service_model_register_update_description_delete_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, {"ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p", ITc_nnstreamer_ml_service_model_get_getactivated_optionget_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, {"ITc_nnstreamer_ml_service_model_getall_activate_p", ITc_nnstreamer_ml_service_model_getall_activate_p, ITs_nnstreamer_ml_service_startup, ITs_nnstreamer_ml_service_cleanup}, +{"ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p", ITc_nnstreamer_tensors_ml_tensors_info_create_extended_p, ITs_nnstreamer_tensors_startup, ITs_nnstreamer_tensors_cleanup}, +{"ITc_nnstreamer_single_invoke_with_extended_p", ITc_nnstreamer_single_invoke_with_extended_p, ITs_nnstreamer_tensors_single_startup, ITs_nnstreamer_tensors_single_cleanup}, {NULL, NULL} };