[UTC][nnstreamer][ACR-1612] Add TC for newly added functions 93/252693/2
authorGichan Jang <gichan2.jang@samsung.com>
Thu, 28 Jan 2021 01:11:09 +0000 (10:11 +0900)
committerGichan Jang <gichan2.jang@samsung.com>
Fri, 19 Feb 2021 04:55:50 +0000 (13:55 +0900)
Added function:
 - ml_single_open_full
 - ml_single_invoke_fast
 - ml_check_element_availability
 - ml_pipeline_tensor_if_custom_register
 - ml_pipeline_tensor_if_custom_unregister

Change-Id: I1139db20477e641116cffa809b08149b9cbb55e7
Signed-off-by: Gichan Jang <gichan2.jang@samsung.com>
src/utc/nnstreamer/tct-nnstreamer-core_mobile.h
src/utc/nnstreamer/tct-nnstreamer-core_tizeniot.h
src/utc/nnstreamer/tct-nnstreamer-core_wearable.h
src/utc/nnstreamer/utc-nnstreamer-capi.c
src/utc/nnstreamer/utc-nnstreamer-pipeline.c
src/utc/nnstreamer/utc-nnstreamer-single.c

index 9ed5cbaa4f28bfc6454b53725c3c383806ef534b..6b85e0a584f085c03d278039506562611bfac90d 100755 (executable)
@@ -54,6 +54,10 @@ extern int utc_ml_pipeline_stop_n (void);
 
 extern int utc_ml_check_nnfw_availability_p (void);
 extern int utc_ml_check_nnfw_availability_n (void);
+extern int utc_ml_check_element_availability_p (void);
+extern int utc_ml_check_element_availability_n1 (void);
+extern int utc_ml_check_element_availability_n2 (void);
+
 extern int utc_ml_pipeline_sink_register_p (void);
 extern int utc_ml_pipeline_sink_register_n (void);
 extern int utc_ml_pipeline_sink_unregister_p (void);
@@ -150,6 +154,12 @@ extern int utc_ml_single_get_property_n (void);
 
 extern int utc_ml_single_invoke_dynamic_p (void);
 extern int utc_ml_single_invoke_dynamic_n (void);
+
+extern int utc_ml_single_open_full_p (void);
+extern int utc_ml_single_open_full_n (void);
+extern int utc_ml_single_invoke_fast_p (void);
+extern int utc_ml_single_invoke_fast_n (void);
+
 extern int utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p (void);
 extern int utc_nnstreamer_scenario_construct_destruct_pipeline_p1 (void);
 extern int utc_nnstreamer_scenario_construct_destruct_pipeline_p2 (void);
@@ -303,6 +313,16 @@ extern int utc_nnstreamer_capi_custom_filter_registration_n7 (void);
 extern int utc_nnstreamer_capi_custom_filter_registration_n8 (void);
 extern int utc_nnstreamer_capi_custom_filter_registration_n9 (void);
 
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_p (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n1 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n2 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n3 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n4 (void);
+
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_p (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_n1 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_n2 (void);
+
 testcase tc_array[] = {
   {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
@@ -318,6 +338,11 @@ testcase tc_array[] = {
 
   {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_p", utc_ml_check_element_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_n1", utc_ml_check_element_availability_n1, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_n2", utc_ml_check_element_availability_n2, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+
   {"utc_ml_pipeline_sink_register_p", utc_ml_pipeline_sink_register_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_unregister_p", utc_ml_pipeline_sink_unregister_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
@@ -414,6 +439,12 @@ testcase tc_array[] = {
 
   {"utc_ml_single_invoke_dynamic_p", utc_ml_single_invoke_dynamic_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_invoke_dynamic_n", utc_ml_single_invoke_dynamic_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+
+  {"utc_ml_single_open_full_p", utc_ml_single_open_full_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_open_full_n", utc_ml_single_open_full_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_invoke_fast_p", utc_ml_single_invoke_fast_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_invoke_fast_n", utc_ml_single_invoke_fast_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+
   {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
@@ -564,6 +595,16 @@ testcase tc_array[] = {
   {"utc_nnstreamer_capi_custom_filter_registration_n7", utc_nnstreamer_capi_custom_filter_registration_n7, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {"utc_nnstreamer_capi_custom_filter_registration_n8", utc_nnstreamer_capi_custom_filter_registration_n8, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {"utc_nnstreamer_capi_custom_filter_registration_n9", utc_nnstreamer_capi_custom_filter_registration_n9, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_p", utc_nnstreamer_capi_tensor_if_custom_registration_p, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n1", utc_nnstreamer_capi_tensor_if_custom_registration_n1, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n2", utc_nnstreamer_capi_tensor_if_custom_registration_n2, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n3", utc_nnstreamer_capi_tensor_if_custom_registration_n3, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n4", utc_nnstreamer_capi_tensor_if_custom_registration_n4, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_p", utc_nnstreamer_capi_tensor_if_custom_unregistration_p, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_n1", utc_nnstreamer_capi_tensor_if_custom_unregistration_n1, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_n2", utc_nnstreamer_capi_tensor_if_custom_unregistration_n2, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {NULL, NULL}
 };
 
index 9ed5cbaa4f28bfc6454b53725c3c383806ef534b..6b85e0a584f085c03d278039506562611bfac90d 100755 (executable)
@@ -54,6 +54,10 @@ extern int utc_ml_pipeline_stop_n (void);
 
 extern int utc_ml_check_nnfw_availability_p (void);
 extern int utc_ml_check_nnfw_availability_n (void);
+extern int utc_ml_check_element_availability_p (void);
+extern int utc_ml_check_element_availability_n1 (void);
+extern int utc_ml_check_element_availability_n2 (void);
+
 extern int utc_ml_pipeline_sink_register_p (void);
 extern int utc_ml_pipeline_sink_register_n (void);
 extern int utc_ml_pipeline_sink_unregister_p (void);
@@ -150,6 +154,12 @@ extern int utc_ml_single_get_property_n (void);
 
 extern int utc_ml_single_invoke_dynamic_p (void);
 extern int utc_ml_single_invoke_dynamic_n (void);
+
+extern int utc_ml_single_open_full_p (void);
+extern int utc_ml_single_open_full_n (void);
+extern int utc_ml_single_invoke_fast_p (void);
+extern int utc_ml_single_invoke_fast_n (void);
+
 extern int utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p (void);
 extern int utc_nnstreamer_scenario_construct_destruct_pipeline_p1 (void);
 extern int utc_nnstreamer_scenario_construct_destruct_pipeline_p2 (void);
@@ -303,6 +313,16 @@ extern int utc_nnstreamer_capi_custom_filter_registration_n7 (void);
 extern int utc_nnstreamer_capi_custom_filter_registration_n8 (void);
 extern int utc_nnstreamer_capi_custom_filter_registration_n9 (void);
 
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_p (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n1 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n2 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n3 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n4 (void);
+
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_p (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_n1 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_n2 (void);
+
 testcase tc_array[] = {
   {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
@@ -318,6 +338,11 @@ testcase tc_array[] = {
 
   {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_p", utc_ml_check_element_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_n1", utc_ml_check_element_availability_n1, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_n2", utc_ml_check_element_availability_n2, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+
   {"utc_ml_pipeline_sink_register_p", utc_ml_pipeline_sink_register_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_unregister_p", utc_ml_pipeline_sink_unregister_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
@@ -414,6 +439,12 @@ testcase tc_array[] = {
 
   {"utc_ml_single_invoke_dynamic_p", utc_ml_single_invoke_dynamic_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_invoke_dynamic_n", utc_ml_single_invoke_dynamic_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+
+  {"utc_ml_single_open_full_p", utc_ml_single_open_full_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_open_full_n", utc_ml_single_open_full_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_invoke_fast_p", utc_ml_single_invoke_fast_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_invoke_fast_n", utc_ml_single_invoke_fast_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+
   {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
@@ -564,6 +595,16 @@ testcase tc_array[] = {
   {"utc_nnstreamer_capi_custom_filter_registration_n7", utc_nnstreamer_capi_custom_filter_registration_n7, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {"utc_nnstreamer_capi_custom_filter_registration_n8", utc_nnstreamer_capi_custom_filter_registration_n8, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {"utc_nnstreamer_capi_custom_filter_registration_n9", utc_nnstreamer_capi_custom_filter_registration_n9, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_p", utc_nnstreamer_capi_tensor_if_custom_registration_p, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n1", utc_nnstreamer_capi_tensor_if_custom_registration_n1, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n2", utc_nnstreamer_capi_tensor_if_custom_registration_n2, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n3", utc_nnstreamer_capi_tensor_if_custom_registration_n3, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n4", utc_nnstreamer_capi_tensor_if_custom_registration_n4, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_p", utc_nnstreamer_capi_tensor_if_custom_unregistration_p, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_n1", utc_nnstreamer_capi_tensor_if_custom_unregistration_n1, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_n2", utc_nnstreamer_capi_tensor_if_custom_unregistration_n2, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {NULL, NULL}
 };
 
index 9ed5cbaa4f28bfc6454b53725c3c383806ef534b..6b85e0a584f085c03d278039506562611bfac90d 100755 (executable)
@@ -54,6 +54,10 @@ extern int utc_ml_pipeline_stop_n (void);
 
 extern int utc_ml_check_nnfw_availability_p (void);
 extern int utc_ml_check_nnfw_availability_n (void);
+extern int utc_ml_check_element_availability_p (void);
+extern int utc_ml_check_element_availability_n1 (void);
+extern int utc_ml_check_element_availability_n2 (void);
+
 extern int utc_ml_pipeline_sink_register_p (void);
 extern int utc_ml_pipeline_sink_register_n (void);
 extern int utc_ml_pipeline_sink_unregister_p (void);
@@ -150,6 +154,12 @@ extern int utc_ml_single_get_property_n (void);
 
 extern int utc_ml_single_invoke_dynamic_p (void);
 extern int utc_ml_single_invoke_dynamic_n (void);
+
+extern int utc_ml_single_open_full_p (void);
+extern int utc_ml_single_open_full_n (void);
+extern int utc_ml_single_invoke_fast_p (void);
+extern int utc_ml_single_invoke_fast_n (void);
+
 extern int utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p (void);
 extern int utc_nnstreamer_scenario_construct_destruct_pipeline_p1 (void);
 extern int utc_nnstreamer_scenario_construct_destruct_pipeline_p2 (void);
@@ -303,6 +313,16 @@ extern int utc_nnstreamer_capi_custom_filter_registration_n7 (void);
 extern int utc_nnstreamer_capi_custom_filter_registration_n8 (void);
 extern int utc_nnstreamer_capi_custom_filter_registration_n9 (void);
 
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_p (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n1 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n2 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n3 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_registration_n4 (void);
+
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_p (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_n1 (void);
+extern int utc_nnstreamer_capi_tensor_if_custom_unregistration_n2 (void);
+
 testcase tc_array[] = {
   {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
@@ -318,6 +338,11 @@ testcase tc_array[] = {
 
   {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_p", utc_ml_check_element_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_n1", utc_ml_check_element_availability_n1, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_element_availability_n2", utc_ml_check_element_availability_n2, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+
   {"utc_ml_pipeline_sink_register_p", utc_ml_pipeline_sink_register_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_unregister_p", utc_ml_pipeline_sink_unregister_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
@@ -414,6 +439,12 @@ testcase tc_array[] = {
 
   {"utc_ml_single_invoke_dynamic_p", utc_ml_single_invoke_dynamic_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_invoke_dynamic_n", utc_ml_single_invoke_dynamic_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+
+  {"utc_ml_single_open_full_p", utc_ml_single_open_full_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_open_full_n", utc_ml_single_open_full_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_invoke_fast_p", utc_ml_single_invoke_fast_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+  {"utc_ml_single_invoke_fast_n", utc_ml_single_invoke_fast_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
+
   {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
@@ -564,6 +595,16 @@ testcase tc_array[] = {
   {"utc_nnstreamer_capi_custom_filter_registration_n7", utc_nnstreamer_capi_custom_filter_registration_n7, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {"utc_nnstreamer_capi_custom_filter_registration_n8", utc_nnstreamer_capi_custom_filter_registration_n8, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {"utc_nnstreamer_capi_custom_filter_registration_n9", utc_nnstreamer_capi_custom_filter_registration_n9, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_p", utc_nnstreamer_capi_tensor_if_custom_registration_p, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n1", utc_nnstreamer_capi_tensor_if_custom_registration_n1, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n2", utc_nnstreamer_capi_tensor_if_custom_registration_n2, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n3", utc_nnstreamer_capi_tensor_if_custom_registration_n3, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_registration_n4", utc_nnstreamer_capi_tensor_if_custom_registration_n4, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_p", utc_nnstreamer_capi_tensor_if_custom_unregistration_p, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_n1", utc_nnstreamer_capi_tensor_if_custom_unregistration_n1, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
+
+  {"utc_nnstreamer_capi_tensor_if_custom_unregistration_n2", utc_nnstreamer_capi_tensor_if_custom_unregistration_n2, utc_nnstreamer_capi_startup, utc_nnstreamer_capi_cleanup},
   {NULL, NULL}
 };
 
index da865438722baa071cb67bf20773290c8a0168cb..8a683fff309e6452bdab62e88500001c4246f6ae 100644 (file)
@@ -3168,3 +3168,301 @@ int utc_nnstreamer_capi_custom_filter_registration_n9 (void)
 
   return 0;
 }
+
+
+/**
+ * @function           test_if_custom_cb
+ * @description                Invoke callback for tensor_if custom condition.
+ */
+static int
+test_if_custom_cb (const ml_tensors_data_h data, const ml_tensors_info_h info, int *result, void *user_data)
+{
+  void *data_ptr;
+  guint sum = 0, i;
+  size_t data_size;
+
+  ml_tensors_data_get_tensor_data (data, 0, &data_ptr, &data_size);
+
+  for (i = 0; i < data_size; i++)
+    sum += ((guint8 *) data_ptr)[i];
+
+  /* Sum value 30 means that the sixth buffer has arrived.*/
+  if (sum >= 30)
+    *result = 0;
+  else
+    *result = 1;
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_registration_p
+ * @since_tizen                6.5
+ * @description                Positive test case of registering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_registration_p (void)
+{
+  IS_SUPPORT_FEATURE;
+  const gchar *_tmpdir = g_get_tmp_dir ();
+  const gchar *_dirname = "nns-tizen-XXXXXX";
+  gchar *fullpath = g_build_path ("/", _tmpdir, _dirname, NULL);
+  gchar *dir = g_mkdtemp ((gchar *)fullpath);
+  gchar *file = g_build_path ("/", dir, "output", NULL);
+  ml_pipeline_h pipe;
+  ml_pipeline_src_h srchandle;
+  ml_pipeline_sink_h sink_false;
+  ml_pipeline_if_h custom;
+  ml_tensors_info_h info;
+  ml_tensors_data_h data;
+  unsigned int count = 0;
+  ml_tensor_type_e type = ML_TENSOR_TYPE_UNKNOWN;
+  int status;
+  uint8_t *uintarray[10];
+  uint8_t *content = NULL;
+  guint i;
+  gsize len;
+  gchar *pipeline = g_strdup_printf (
+      "appsrc name=appsrc ! other/tensor,dimension=(string)4:1:1:1, type=(string)uint8,framerate=(fraction)0/1 ! "
+      "tensor_if name=tif compared-value=CUSTOM compared-value-option=tif_custom_cb_name then=PASSTHROUGH else=PASSTHROUGH "
+      "tif.src_0 ! queue ! filesink location=\"%s\" buffer-mode=unbuffered "
+      "tif.src_1 ! queue ! tensor_sink name=sink_false sync=false async=false", file);
+
+  guint *count_sink = (guint *)g_malloc0 (sizeof (guint));
+  assert (count_sink);
+  *count_sink = 0;
+
+  /* test code for tensor_if custom */
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", test_if_custom_cb, NULL, &custom);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_construct (pipeline, NULL, NULL, &pipe);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_sink_register (
+      pipe, "sink_false", test_sink_callback_count, count_sink, &sink_false);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_src_get_handle (pipe, "appsrc", &srchandle);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_start (pipe);
+  assert_eq (status, ML_ERROR_NONE);
+
+  for (i = 0; i < 10; i++) {
+    uintarray[i] = (uint8_t *)g_malloc (4);
+    assert (uintarray[i]);
+    uintarray[i][0] = i + 4;
+    uintarray[i][1] = i + 1;
+    uintarray[i][2] = i + 3;
+    uintarray[i][3] = i + 2;
+  }
+
+  status = ml_pipeline_src_get_tensors_info (srchandle, &info);
+  assert_eq (status, ML_ERROR_NONE);
+
+  ml_tensors_info_get_count (info, &count);
+  assert_eq (count, 1U);
+
+  ml_tensors_info_get_tensor_type (info, 0, &type);
+  assert_eq (type, ML_TENSOR_TYPE_UINT8);
+
+  status = ml_tensors_data_create (info, &data);
+  assert_eq (status, ML_ERROR_NONE);
+
+  /* Set tensor data and push buffers to source pad */
+  for (i = 0; i < 10; i++) {
+    status = ml_tensors_data_set_tensor_data (data, 0, uintarray[i], 4);
+    assert_eq (status, ML_ERROR_NONE);
+
+    status = ml_pipeline_src_input_data (srchandle, data, ML_PIPELINE_BUF_POLICY_DO_NOT_FREE);
+    assert_eq (status, ML_ERROR_NONE);
+
+    g_usleep (50000); /* 50ms. Wait a bit. */
+  }
+
+  status = ml_pipeline_stop (pipe);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_src_release_handle (srchandle);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_sink_unregister (sink_false);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_destroy (pipe);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_tensor_if_custom_unregister (custom);
+  assert_eq (status, ML_ERROR_NONE);
+
+  assert_eq (g_file_get_contents (file, (gchar **)&content, &len, NULL), TRUE);
+  assert_eq (len, 4U * 5);
+  assert (content);
+
+  /* Check if the TRUE path data is received correctly.  */
+  if (content && len == 20) {
+    for (i = 0; i < 5; i++) {
+      assert_eq (content[i * 4 + 0], i + 4);
+      assert_eq (content[i * 4 + 1], i + 1);
+      assert_eq (content[i * 4 + 2], i + 3);
+      assert_eq (content[i * 4 + 3], i + 2);
+    }
+  }
+  g_free (content);
+
+  /* The FALSE path receives 5 buffers. */
+  assert_eq (*count_sink, 5U);
+
+  for (i = 0; i < 10; i++) {
+    g_free (uintarray[i]);
+  }
+  ml_tensors_info_destroy (info);
+  ml_tensors_data_destroy (data);
+  g_free (pipeline);
+  g_free (count_sink);
+  g_free (fullpath);
+  g_free (file);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_registration_n1
+ * @since_tizen                6.5
+ * @description                Negative test case of registering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_registration_n1 (void)
+{
+  IS_SUPPORT_FEATURE;
+  ml_pipeline_if_h custom;
+  int status;
+
+  /* test code with null param */
+  status = ml_pipeline_tensor_if_custom_register (NULL, test_if_custom_cb, NULL, &custom);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_registration_n2
+ * @since_tizen                6.5
+ * @description                Negative test case of registering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_registration_n2 (void)
+{
+  IS_SUPPORT_FEATURE;
+  ml_pipeline_if_h custom;
+  int status;
+
+  /* test code with null param */
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", NULL, NULL, &custom);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_registration_n3
+ * @since_tizen                6.5
+ * @description                Negative test case of registering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_registration_n3 (void)
+{
+  IS_SUPPORT_FEATURE;
+  int status;
+
+  /* test code with null param */
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", test_if_custom_cb, NULL, NULL);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_registration_n4
+ * @since_tizen                6.5
+ * @description                Negative test case of registering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_registration_n4 (void)
+{
+  IS_SUPPORT_FEATURE;
+  ml_pipeline_if_h custom1, custom2;
+  int status;
+
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", test_if_custom_cb, NULL, &custom1);
+  assert_eq (status, ML_ERROR_NONE);
+
+  /* test to register tensor_if custom twice with same name */
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", test_if_custom_cb, NULL, &custom2);
+  assert_neq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_tensor_if_custom_unregister (custom1);
+  assert_eq (status, ML_ERROR_NONE);
+
+  return 0;
+}
+
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_unregistration_p
+ * @since_tizen                6.5
+ * @description                Positive test case of unregistering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_unregistration_p (void)
+{
+  IS_SUPPORT_FEATURE;
+  int status;
+  ml_pipeline_if_h custom;
+
+  /* register tensor if custom */
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", test_if_custom_cb, NULL, &custom);
+  assert_eq (status, ML_ERROR_NONE);
+
+  /* unregister tensor if custom */
+  status = ml_pipeline_tensor_if_custom_unregister (custom);
+  assert_eq (status, ML_ERROR_NONE);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_unregistration_n1
+ * @since_tizen                6.5
+ * @description                Negative test case of unregistering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_unregistration_n1 (void)
+{
+  IS_SUPPORT_FEATURE;
+  int status;
+
+  /* test code with null param */
+  status = ml_pipeline_tensor_if_custom_unregister (NULL);
+  assert_neq (status, ML_ERROR_NONE);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_nnstreamer_capi_tensor_if_custom_unregistration_n2
+ * @since_tizen                6.5
+ * @description                Negative test case of unregistering the tensor_if custom condition
+ */
+int utc_nnstreamer_capi_tensor_if_custom_unregistration_n2 (void)
+{
+  IS_SUPPORT_FEATURE;
+  ml_pipeline_if_h custom;
+  int status;
+
+  status = ml_pipeline_tensor_if_custom_register ("tif_custom_cb_name", test_if_custom_cb, NULL, &custom);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_pipeline_tensor_if_custom_unregister (custom);
+  assert_eq (status, ML_ERROR_NONE);
+
+  /* test to unregister tensor_if custom twice */
+  status = ml_pipeline_tensor_if_custom_unregister (custom);
+  assert_neq (status, ML_ERROR_NONE);
+
+  return 0;
+}
index 1758de6a8c8c867c7e4ff71b242cf3c14b8433cf..c2fb141d627f51334af045c4347f7f6683b24e77 100644 (file)
@@ -314,3 +314,67 @@ int utc_ml_check_nnfw_availability_n (void)
 
   return 0;
 }
+
+/**
+ * @testcase           utc_ml_check_element_availability_p
+ * @since_tizen                6.5
+ * @description                 Test NNStreamer Utility for checking an element availability.
+ */
+int utc_ml_check_element_availability_p (void)
+{
+  IS_SUPPORT_FEATURE;
+  bool available;
+  int status;
+
+  status = ml_check_element_availability ("tensor_converter", &available);
+  assert_eq (status, ML_ERROR_NONE);
+  assert_eq (available, true);
+
+  status = ml_check_element_availability ("tensor_filter", &available);
+  assert_eq (status, ML_ERROR_NONE);
+  assert_eq (available, true);
+
+  status = ml_check_element_availability ("appsrc", &available);
+  assert_eq (status, ML_ERROR_NONE);
+  assert_eq (available, true);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_ml_check_element_availability_n1
+ * @since_tizen                6.5
+ * @description                 Test NNStreamer Utility for checking an element availability, Failure case.
+ */
+int utc_ml_check_element_availability_n1 (void)
+{
+  IS_SUPPORT_FEATURE;
+  bool available;
+  int status;
+
+  status = ml_check_element_availability (NULL, &available);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  status = ml_check_element_availability ("tensor_filter", NULL);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_ml_check_element_availability_n2
+ * @since_tizen                6.5
+ * @description                 Test NNStreamer Utility for checking an element availability, Failure case.
+ */
+int utc_ml_check_element_availability_n2 (void)
+{
+  IS_SUPPORT_FEATURE;
+  bool available;
+  int status;
+
+  status = ml_check_element_availability ("invalid-elem", &available);
+  assert_eq (status, ML_ERROR_NONE);
+  assert_eq (available, false);
+
+  return 0;
+}
index e5a759103e502ae317b2025f50afa0f46a2bac0c..464c298d92b514e5b09a085066aea2637f1bed07 100644 (file)
@@ -858,3 +858,130 @@ int utc_ml_single_invoke_dynamic_n (void)
 
   return 0;
 }
+
+/**
+ * @testcase           utc_ml_single_open_full_p
+ * @since_tizen                6.5
+ * @description                Test NNStreamer single open with cusotom options
+ */
+int utc_ml_single_open_full_p (void)
+{
+  IS_SUPPORT_FEATURE;
+  const char * custom_option = "NumThreads:2";
+  assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
+
+  status = ml_single_open_full (&single, test_model, NULL, NULL,
+     ML_NNFW_TYPE_TENSORFLOW_LITE, ML_NNFW_HW_ANY, custom_option);
+  assert_eq (status, ML_ERROR_NONE);
+
+  status = ml_single_close (single);
+  assert_eq (status, ML_ERROR_NONE);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_ml_single_open_full_n
+ * @since_tizen                6.5
+ * @description                Test NNStreamer single open with cusotom options, failure case
+ */
+int utc_ml_single_open_full_n (void)
+{
+  IS_SUPPORT_FEATURE;
+  const char * custom_option = "NumThreads:2";
+  status = ml_single_open_full (&single, "wrong_file_name", NULL, NULL,
+     ML_NNFW_TYPE_TENSORFLOW_LITE, ML_NNFW_TYPE_ANY, custom_option);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_ml_single_invoke_fast_p
+ * @since_tizen                6.5
+ * @description                Test NNStreamer invoke model with preallocated output
+ */
+int utc_ml_single_invoke_fast_p (void)
+{
+  IS_SUPPORT_FEATURE;
+  ml_tensors_info_h in_info, out_info;
+  ml_tensors_data_h input, output;
+  ml_tensor_dimension in_dim, out_dim;
+
+  assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
+
+  ml_tensors_info_create (&in_info);
+  ml_tensors_info_create (&out_info);
+
+  in_dim[0] = 3;
+  in_dim[1] = 224;
+  in_dim[2] = 224;
+  in_dim[3] = 1;
+  ml_tensors_info_set_count (in_info, 1);
+  ml_tensors_info_set_tensor_type (in_info, 0, ML_TENSOR_TYPE_UINT8);
+  ml_tensors_info_set_tensor_dimension (in_info, 0, in_dim);
+
+  out_dim[0] = 1001;
+  out_dim[1] = 1;
+  out_dim[2] = 1;
+  out_dim[3] = 1;
+  ml_tensors_info_set_count (out_info, 1);
+  ml_tensors_info_set_tensor_type (out_info, 0, ML_TENSOR_TYPE_UINT8);
+  ml_tensors_info_set_tensor_dimension (out_info, 0, out_dim);
+
+  status = ml_single_open (&single, test_model, in_info, out_info,
+      ML_NNFW_TYPE_TENSORFLOW_LITE, ML_NNFW_HW_ANY);
+  assert_eq (status, ML_ERROR_NONE);
+
+  input = output = NULL;
+
+  /* generate dummy data */
+  status = ml_tensors_data_create (in_info, &input);
+  assert_eq (status, ML_ERROR_NONE);
+  assert (input != NULL);
+
+  status = ml_tensors_data_create (out_info, &output);
+  assert_eq (status, ML_ERROR_NONE);
+  assert (output != NULL);
+
+  status = ml_single_invoke_fast (single, input, output);
+  assert_eq (status, ML_ERROR_NONE);
+  assert (output != NULL);
+
+  ml_tensors_data_destroy (output);
+  ml_tensors_data_destroy (input);
+
+  status = ml_single_close (single);
+  assert_eq (status, ML_ERROR_NONE);
+
+  ml_tensors_info_destroy (in_info);
+  ml_tensors_info_destroy (out_info);
+
+  return 0;
+}
+
+/**
+ * @testcase           utc_ml_single_invoke_fast_n
+ * @since_tizen                6.5
+ * @description                Test NNStreamer invoke model with preallocated output, failure case
+ */
+int utc_ml_single_invoke_fast_n (void)
+{
+  IS_SUPPORT_FEATURE;
+  ml_tensors_data_h input, output;
+
+  assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
+
+  status = ml_single_open (&single, test_model, NULL, NULL,
+     ML_NNFW_TYPE_TENSORFLOW_LITE, ML_NNFW_HW_ANY);
+  assert_eq (status, ML_ERROR_NONE);
+
+  input = output = NULL;
+  status = ml_single_invoke_fast (single, input, &output);
+  assert_eq (status, ML_ERROR_INVALID_PARAMETER);
+
+  status = ml_single_close (single);
+  assert_eq (status, ML_ERROR_NONE);
+
+  return 0;
+}