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);
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);
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},
{"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},
{"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},
{"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}
};
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);
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);
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},
{"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},
{"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},
{"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}
};
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);
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);
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},
{"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},
{"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},
{"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}
};
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;
+}
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;
+}
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;
+}