tests: convert lib conds test to C++
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 23 May 2023 14:40:41 +0000 (10:40 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 31 May 2023 19:47:48 +0000 (15:47 -0400)
Rename the files from .c/.h to .cpp/.hpp.  Do some minor adjustments so
that it builds.

Change-Id: I4ab79151428ecaf37396e0da891ecd5fa10e19e9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/10053
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
tests/lib/conds/Makefile.am
tests/lib/conds/conds-triggers.c [deleted file]
tests/lib/conds/conds-triggers.cpp [new file with mode: 0644]
tests/lib/conds/utils.c [deleted file]
tests/lib/conds/utils.cpp [new file with mode: 0644]
tests/lib/conds/utils.h [deleted file]
tests/lib/conds/utils.hpp [new file with mode: 0644]

index 7b0b6d3d96bc1b4393194252e2d27ed91135c896..2db2f8111fd45fcc3759eb767aa28252456d2c03 100644 (file)
@@ -2,7 +2,10 @@
 
 AM_CPPFLAGS += -I$(top_srcdir)/tests/utils
 
-conds_triggers_SOURCES = conds-triggers.c utils.c utils.h
+conds_triggers_SOURCES = \
+       conds-triggers.cpp \
+       utils.cpp utils.hpp
+
 conds_triggers_LDADD = \
        $(top_builddir)/src/common/libbabeltrace2-common.la \
        $(top_builddir)/src/logging/libbabeltrace2-logging.la \
diff --git a/tests/lib/conds/conds-triggers.c b/tests/lib/conds/conds-triggers.c
deleted file mode 100644 (file)
index 7a13705..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
- */
-
-#include <babeltrace2/babeltrace.h>
-
-#include "common/assert.h"
-#include "utils.h"
-
-static
-void trigger_graph_mip_version(void)
-{
-       bt_graph_create(292);
-}
-
-static
-bt_field_class *get_uint_fc(bt_self_component *self_comp)
-{
-       bt_trace_class *tc = bt_trace_class_create(self_comp);
-       bt_field_class *fc;
-
-       BT_ASSERT(tc);
-       fc = bt_field_class_integer_unsigned_create(tc);
-       BT_ASSERT(fc);
-       return fc;
-}
-
-static
-void trigger_fc_int_set_field_value_range_n_0(bt_self_component *self_comp)
-{
-       bt_field_class_integer_set_field_value_range(get_uint_fc(self_comp), 0);
-}
-
-static
-void trigger_fc_int_set_field_value_range_n_gt_64(bt_self_component *self_comp)
-{
-       bt_field_class_integer_set_field_value_range(get_uint_fc(self_comp),
-               65);
-}
-
-static
-void trigger_fc_int_set_field_value_range_null(bt_self_component *self_comp)
-{
-       bt_field_class_integer_set_field_value_range(NULL, 23);
-}
-
-static
-const struct cond_trigger triggers[] = {
-       COND_TRIGGER_PRE_BASIC("pre:graph-create:valid-mip-version", NULL,
-               trigger_graph_mip_version),
-       COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(
-               "pre:field-class-integer-set-field-value-range:valid-n",
-               "0",
-               trigger_fc_int_set_field_value_range_n_0
-       ),
-       COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(
-               "pre:field-class-integer-set-field-value-range:valid-n",
-               "gt-64",
-               trigger_fc_int_set_field_value_range_n_gt_64
-       ),
-       COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(
-               "pre:field-class-integer-set-field-value-range:not-null:field-class",
-               NULL,
-               trigger_fc_int_set_field_value_range_null
-       ),
-};
-
-int main(int argc, const char *argv[])
-{
-       cond_main(argc, argv, triggers, sizeof(triggers) / sizeof(*triggers));
-       return 0;
-}
diff --git a/tests/lib/conds/conds-triggers.cpp b/tests/lib/conds/conds-triggers.cpp
new file mode 100644 (file)
index 0000000..4c10f38
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
+ */
+
+#include <babeltrace2/babeltrace.h>
+
+#include "common/assert.h"
+#include "utils.hpp"
+
+static
+void trigger_graph_mip_version(void)
+{
+       bt_graph_create(292);
+}
+
+static
+bt_field_class *get_uint_fc(bt_self_component *self_comp)
+{
+       bt_trace_class *tc = bt_trace_class_create(self_comp);
+       bt_field_class *fc;
+
+       BT_ASSERT(tc);
+       fc = bt_field_class_integer_unsigned_create(tc);
+       BT_ASSERT(fc);
+       return fc;
+}
+
+static
+void trigger_fc_int_set_field_value_range_n_0(bt_self_component *self_comp)
+{
+       bt_field_class_integer_set_field_value_range(get_uint_fc(self_comp), 0);
+}
+
+static
+void trigger_fc_int_set_field_value_range_n_gt_64(bt_self_component *self_comp)
+{
+       bt_field_class_integer_set_field_value_range(get_uint_fc(self_comp),
+               65);
+}
+
+static
+void trigger_fc_int_set_field_value_range_null(bt_self_component *self_comp)
+{
+       bt_field_class_integer_set_field_value_range(NULL, 23);
+}
+
+static
+const struct cond_trigger triggers[] = {
+       COND_TRIGGER_PRE_BASIC("pre:graph-create:valid-mip-version", NULL,
+               trigger_graph_mip_version),
+       COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(
+               "pre:field-class-integer-set-field-value-range:valid-n",
+               "0",
+               trigger_fc_int_set_field_value_range_n_0
+       ),
+       COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(
+               "pre:field-class-integer-set-field-value-range:valid-n",
+               "gt-64",
+               trigger_fc_int_set_field_value_range_n_gt_64
+       ),
+       COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(
+               "pre:field-class-integer-set-field-value-range:not-null:field-class",
+               NULL,
+               trigger_fc_int_set_field_value_range_null
+       ),
+};
+
+int main(int argc, const char *argv[])
+{
+       cond_main(argc, argv, triggers, sizeof(triggers) / sizeof(*triggers));
+       return 0;
+}
diff --git a/tests/lib/conds/utils.c b/tests/lib/conds/utils.c
deleted file mode 100644 (file)
index 8fb5bc8..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <babeltrace2/babeltrace.h>
-#include <glib.h>
-
-#include "common/assert.h"
-#include "utils.h"
-
-typedef void (* run_in_comp_cls_init_func)(
-               bt_self_component *self_comp, void *user_data);
-
-struct comp_cls_init_method_data {
-       run_in_comp_cls_init_func func;
-       void *user_data;
-};
-
-static
-bt_component_class_initialize_method_status comp_cls_init(
-               bt_self_component_source *self_comp,
-               bt_self_component_source_configuration *conf,
-               const bt_value *params, void *init_method_data)
-{
-       struct comp_cls_init_method_data *data = init_method_data;
-
-       /* Call user function which is expected to abort */
-       data->func(bt_self_component_source_as_self_component(self_comp),
-               data->user_data);
-
-       /* Never reached! */
-       return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
-}
-
-static
-bt_message_iterator_class_next_method_status msg_iter_cls_next(
-               bt_self_message_iterator *self_msg_iter,
-               bt_message_array_const msgs, uint64_t capacity,
-               uint64_t *count)
-{
-       /* Not used */
-       return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
-}
-
-static
-void run_in_comp_cls_init(run_in_comp_cls_init_func func,
-               void *user_data)
-{
-       bt_message_iterator_class *msg_iter_cls;
-       bt_component_class_source *comp_cls;
-       bt_component_class_set_method_status set_method_status;
-       bt_graph *graph;
-       struct comp_cls_init_method_data init_method_data = {
-               .func = func,
-               .user_data = user_data,
-       };
-
-       /* Create component class */
-       msg_iter_cls = bt_message_iterator_class_create(msg_iter_cls_next);
-       BT_ASSERT(msg_iter_cls);
-       comp_cls = bt_component_class_source_create("yo", msg_iter_cls);
-       BT_ASSERT(comp_cls);
-       set_method_status = bt_component_class_source_set_initialize_method(
-               comp_cls, comp_cls_init);
-       BT_ASSERT(set_method_status == BT_COMPONENT_CLASS_SET_METHOD_STATUS_OK);
-
-       /* Create graph */
-       graph = bt_graph_create(0);
-       BT_ASSERT(graph);
-
-       /*
-        * Add source component: this calls the initialization method,
-        * calling `func`.
-        */
-       (void) bt_graph_add_source_component_with_initialize_method_data(graph,
-                       comp_cls, "whatever", NULL, &init_method_data,
-                       BT_LOGGING_LEVEL_NONE, NULL);
-
-       /*
-        * This point is not expected to be reached as func() is
-        * expected to abort.
-        */
-}
-
-static
-void run_in_comp_cls_init_defer(bt_self_component *self_comp,
-               void *user_data)
-{
-       cond_trigger_run_in_comp_cls_init_func user_func = user_data;
-
-       user_func(self_comp);
-}
-
-static
-void run_trigger(const struct cond_trigger *trigger)
-{
-       switch (trigger->func_type) {
-       case COND_TRIGGER_FUNC_TYPE_BASIC:
-               trigger->func.basic();
-               break;
-       case COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT:
-               run_in_comp_cls_init(run_in_comp_cls_init_defer,
-                       trigger->func.run_in_comp_cls_init);
-               break;
-       default:
-               abort();
-       }
-}
-
-static
-void escape_json_string(const char *str, GString *escaped_str)
-{
-       g_string_assign(escaped_str, "");
-
-       for (const char *ch = str; *ch; ch++) {
-               if (*ch == '\\' || *ch == '"') {
-                       g_string_append_c(escaped_str, '\\');
-               }
-
-               g_string_append_c(escaped_str, *ch);
-       }
-}
-
-static
-void list_triggers(const struct cond_trigger triggers[], size_t trigger_count)
-{
-       GString *escaped_str = g_string_new(NULL);
-       size_t i;
-
-       BT_ASSERT(escaped_str);
-       printf("[");
-
-       for (i = 0; i < trigger_count; i++) {
-               const struct cond_trigger *trigger = &triggers[i];
-
-               /* Condition ID */
-               escape_json_string(trigger->cond_id, escaped_str);
-               printf("{\"cond-id\":\"%s\",", escaped_str->str);
-
-               /* Name starts with condition ID */
-               printf("\"name\":\"%s", escaped_str->str);
-
-               if (trigger->suffix) {
-                       escape_json_string(trigger->suffix, escaped_str);
-                       printf("-%s", escaped_str->str);
-               }
-
-               printf("\"}");
-
-               if (i < trigger_count - 1) {
-                       /* Comma between objects */
-                       printf(",");
-               }
-       }
-
-       printf("]");
-       g_string_free(escaped_str, TRUE);
-       fflush(stdout);
-}
-
-void cond_main(int argc, const char *argv[],
-               const struct cond_trigger triggers[], size_t trigger_count)
-{
-       BT_ASSERT(argc >= 2);
-
-       if (strcmp(argv[1], "list") == 0) {
-               list_triggers(triggers, trigger_count);
-       } else if (strcmp(argv[1], "run") == 0) {
-               int index;
-
-               BT_ASSERT(argc >= 3);
-               index = atoi(argv[2]);
-               BT_ASSERT(index >= 0 && index < trigger_count);
-               run_trigger(&triggers[index]);
-       }
-}
diff --git a/tests/lib/conds/utils.cpp b/tests/lib/conds/utils.cpp
new file mode 100644 (file)
index 0000000..015e09b
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <babeltrace2/babeltrace.h>
+#include <glib.h>
+
+#include "common/assert.h"
+#include "utils.hpp"
+
+typedef void (* run_in_comp_cls_init_func)(
+               bt_self_component *self_comp, void *user_data);
+
+struct comp_cls_init_method_data {
+       run_in_comp_cls_init_func func;
+       void *user_data;
+};
+
+static
+bt_component_class_initialize_method_status comp_cls_init(
+               bt_self_component_source *self_comp,
+               bt_self_component_source_configuration *conf,
+               const bt_value *params, void *init_method_data)
+{
+       comp_cls_init_method_data *data =
+               static_cast<comp_cls_init_method_data *>(init_method_data);
+
+       /* Call user function which is expected to abort */
+       data->func(bt_self_component_source_as_self_component(self_comp),
+               data->user_data);
+
+       /* Never reached! */
+       return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+}
+
+static
+bt_message_iterator_class_next_method_status msg_iter_cls_next(
+               bt_self_message_iterator *self_msg_iter,
+               bt_message_array_const msgs, uint64_t capacity,
+               uint64_t *count)
+{
+       /* Not used */
+       return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
+}
+
+static
+void run_in_comp_cls_init(run_in_comp_cls_init_func func,
+               void *user_data)
+{
+       bt_message_iterator_class *msg_iter_cls;
+       bt_component_class_source *comp_cls;
+       bt_component_class_set_method_status set_method_status;
+       bt_graph *graph;
+       struct comp_cls_init_method_data init_method_data = {
+               .func = func,
+               .user_data = user_data,
+       };
+
+       /* Create component class */
+       msg_iter_cls = bt_message_iterator_class_create(msg_iter_cls_next);
+       BT_ASSERT(msg_iter_cls);
+       comp_cls = bt_component_class_source_create("yo", msg_iter_cls);
+       BT_ASSERT(comp_cls);
+       set_method_status = bt_component_class_source_set_initialize_method(
+               comp_cls, comp_cls_init);
+       BT_ASSERT(set_method_status == BT_COMPONENT_CLASS_SET_METHOD_STATUS_OK);
+
+       /* Create graph */
+       graph = bt_graph_create(0);
+       BT_ASSERT(graph);
+
+       /*
+        * Add source component: this calls the initialization method,
+        * calling `func`.
+        */
+       (void) bt_graph_add_source_component_with_initialize_method_data(graph,
+                       comp_cls, "whatever", NULL, &init_method_data,
+                       BT_LOGGING_LEVEL_NONE, NULL);
+
+       /*
+        * This point is not expected to be reached as func() is
+        * expected to abort.
+        */
+}
+
+static
+void run_in_comp_cls_init_defer(bt_self_component *self_comp,
+               void *user_data)
+{
+       cond_trigger_run_in_comp_cls_init_func user_func =
+               reinterpret_cast<cond_trigger_run_in_comp_cls_init_func>(user_data);
+
+       user_func(self_comp);
+}
+
+static
+void run_trigger(const struct cond_trigger *trigger)
+{
+       switch (trigger->func_type) {
+       case COND_TRIGGER_FUNC_TYPE_BASIC:
+               trigger->func.basic();
+               break;
+       case COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT:
+               run_in_comp_cls_init(run_in_comp_cls_init_defer,
+                       reinterpret_cast<void *>(trigger->func.run_in_comp_cls_init));
+               break;
+       default:
+               abort();
+       }
+}
+
+static
+void escape_json_string(const char *str, GString *escaped_str)
+{
+       g_string_assign(escaped_str, "");
+
+       for (const char *ch = str; *ch; ch++) {
+               if (*ch == '\\' || *ch == '"') {
+                       g_string_append_c(escaped_str, '\\');
+               }
+
+               g_string_append_c(escaped_str, *ch);
+       }
+}
+
+static
+void list_triggers(const struct cond_trigger triggers[], size_t trigger_count)
+{
+       GString *escaped_str = g_string_new(NULL);
+       size_t i;
+
+       BT_ASSERT(escaped_str);
+       printf("[");
+
+       for (i = 0; i < trigger_count; i++) {
+               const struct cond_trigger *trigger = &triggers[i];
+
+               /* Condition ID */
+               escape_json_string(trigger->cond_id, escaped_str);
+               printf("{\"cond-id\":\"%s\",", escaped_str->str);
+
+               /* Name starts with condition ID */
+               printf("\"name\":\"%s", escaped_str->str);
+
+               if (trigger->suffix) {
+                       escape_json_string(trigger->suffix, escaped_str);
+                       printf("-%s", escaped_str->str);
+               }
+
+               printf("\"}");
+
+               if (i < trigger_count - 1) {
+                       /* Comma between objects */
+                       printf(",");
+               }
+       }
+
+       printf("]");
+       g_string_free(escaped_str, TRUE);
+       fflush(stdout);
+}
+
+void cond_main(int argc, const char *argv[],
+               const struct cond_trigger triggers[], size_t trigger_count)
+{
+       BT_ASSERT(argc >= 2);
+
+       if (strcmp(argv[1], "list") == 0) {
+               list_triggers(triggers, trigger_count);
+       } else if (strcmp(argv[1], "run") == 0) {
+               int index;
+
+               BT_ASSERT(argc >= 3);
+               index = atoi(argv[2]);
+               BT_ASSERT(index >= 0 && index < trigger_count);
+               run_trigger(&triggers[index]);
+       }
+}
diff --git a/tests/lib/conds/utils.h b/tests/lib/conds/utils.h
deleted file mode 100644 (file)
index 1a77bde..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * SPDX-License-Identifier: GPL-2.0-only
- *
- * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
- */
-
-#ifndef TESTS_LIB_CONDS_UTILS_H
-#define TESTS_LIB_CONDS_UTILS_H
-
-enum cond_trigger_func_type {
-       COND_TRIGGER_FUNC_TYPE_BASIC,
-       COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT,
-};
-
-enum cond_trigger_type {
-       COND_TRIGGER_TYPE_PRE,
-       COND_TRIGGER_TYPE_POST,
-};
-
-typedef void (* cond_trigger_basic_func)(void);
-typedef void (* cond_trigger_run_in_comp_cls_init_func)(bt_self_component *);
-
-struct cond_trigger {
-       enum cond_trigger_type type;
-       enum cond_trigger_func_type func_type;
-       const char *cond_id;
-       const char *suffix;
-       union {
-               cond_trigger_basic_func basic;
-               cond_trigger_run_in_comp_cls_init_func run_in_comp_cls_init;
-       } func;
-};
-
-#define COND_TRIGGER_PRE_BASIC(_cond_id, _suffix, _func)               \
-       {                                                               \
-               .type = COND_TRIGGER_TYPE_PRE,                          \
-               .func_type = COND_TRIGGER_FUNC_TYPE_BASIC,              \
-               .cond_id = _cond_id,                                    \
-               .suffix = _suffix,                                      \
-               .func = {                                               \
-                       .basic = _func,                                 \
-               }                                                       \
-       }
-
-#define COND_TRIGGER_POST_BASIC(_cond_id, _suffix, _func)              \
-       {                                                               \
-               .type = COND_TRIGGER_TYPE_POST,                         \
-               .func_type = COND_TRIGGER_FUNC_TYPE_BASIC,              \
-               .cond_id = _cond_id,                                    \
-               .suffix = _suffix,                                      \
-               .func = {                                               \
-                       .basic = _func,                                 \
-               }                                                       \
-       }
-
-#define COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(_cond_id, _suffix, _func)        \
-       {                                                               \
-               .type = COND_TRIGGER_TYPE_PRE,                          \
-               .func_type = COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT, \
-               .cond_id = _cond_id,                                    \
-               .suffix = _suffix,                                      \
-               .func = {                                               \
-                       .run_in_comp_cls_init = _func,                  \
-               }                                                       \
-       }
-
-#define COND_TRIGGER_POST_RUN_IN_COMP_CLS_INIT(_cond_id, _suffix, _func) \
-       {                                                               \
-               .type = COND_TRIGGER_TYPE_POST,                         \
-               .func_type = COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT, \
-               .cond_id = _cond_id,                                    \
-               .suffix = _suffix,                                      \
-               .func = {                                               \
-                       .run_in_comp_cls_init = _func,                  \
-               }                                                       \
-       }
-
-void cond_main(int argc, const char *argv[],
-               const struct cond_trigger triggers[],
-               size_t trigger_count);
-
-#endif /* TESTS_LIB_CONDS_UTILS_H */
diff --git a/tests/lib/conds/utils.hpp b/tests/lib/conds/utils.hpp
new file mode 100644 (file)
index 0000000..1a77bde
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
+ */
+
+#ifndef TESTS_LIB_CONDS_UTILS_H
+#define TESTS_LIB_CONDS_UTILS_H
+
+enum cond_trigger_func_type {
+       COND_TRIGGER_FUNC_TYPE_BASIC,
+       COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT,
+};
+
+enum cond_trigger_type {
+       COND_TRIGGER_TYPE_PRE,
+       COND_TRIGGER_TYPE_POST,
+};
+
+typedef void (* cond_trigger_basic_func)(void);
+typedef void (* cond_trigger_run_in_comp_cls_init_func)(bt_self_component *);
+
+struct cond_trigger {
+       enum cond_trigger_type type;
+       enum cond_trigger_func_type func_type;
+       const char *cond_id;
+       const char *suffix;
+       union {
+               cond_trigger_basic_func basic;
+               cond_trigger_run_in_comp_cls_init_func run_in_comp_cls_init;
+       } func;
+};
+
+#define COND_TRIGGER_PRE_BASIC(_cond_id, _suffix, _func)               \
+       {                                                               \
+               .type = COND_TRIGGER_TYPE_PRE,                          \
+               .func_type = COND_TRIGGER_FUNC_TYPE_BASIC,              \
+               .cond_id = _cond_id,                                    \
+               .suffix = _suffix,                                      \
+               .func = {                                               \
+                       .basic = _func,                                 \
+               }                                                       \
+       }
+
+#define COND_TRIGGER_POST_BASIC(_cond_id, _suffix, _func)              \
+       {                                                               \
+               .type = COND_TRIGGER_TYPE_POST,                         \
+               .func_type = COND_TRIGGER_FUNC_TYPE_BASIC,              \
+               .cond_id = _cond_id,                                    \
+               .suffix = _suffix,                                      \
+               .func = {                                               \
+                       .basic = _func,                                 \
+               }                                                       \
+       }
+
+#define COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT(_cond_id, _suffix, _func)        \
+       {                                                               \
+               .type = COND_TRIGGER_TYPE_PRE,                          \
+               .func_type = COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT, \
+               .cond_id = _cond_id,                                    \
+               .suffix = _suffix,                                      \
+               .func = {                                               \
+                       .run_in_comp_cls_init = _func,                  \
+               }                                                       \
+       }
+
+#define COND_TRIGGER_POST_RUN_IN_COMP_CLS_INIT(_cond_id, _suffix, _func) \
+       {                                                               \
+               .type = COND_TRIGGER_TYPE_POST,                         \
+               .func_type = COND_TRIGGER_FUNC_TYPE_RUN_IN_COMP_CLS_INIT, \
+               .cond_id = _cond_id,                                    \
+               .suffix = _suffix,                                      \
+               .func = {                                               \
+                       .run_in_comp_cls_init = _func,                  \
+               }                                                       \
+       }
+
+void cond_main(int argc, const char *argv[],
+               const struct cond_trigger triggers[],
+               size_t trigger_count);
+
+#endif /* TESTS_LIB_CONDS_UTILS_H */
This page took 0.03465 seconds and 4 git commands to generate.