tests/lib/conds: store triggers in a vector
[babeltrace.git] / tests / lib / conds / conds-triggers.cpp
CommitLineData
5d7e8359
PP
1/*
2 * SPDX-License-Identifier: GPL-2.0-only
3 *
4 * Copyright (C) 2020 Philippe Proulx <pproulx@efficios.com>
5 */
6
5d7e57e8
SM
7#include <utility>
8
5d7e8359
PP
9#include <babeltrace2/babeltrace.h>
10
5d7e57e8 11#include "cpp-common/bt2/graph.hpp"
4ad43657 12#include "cpp-common/bt2c/c-string-view.hpp"
25fe6ea5 13#include "cpp-common/bt2s/make-unique.hpp"
5d7e57e8 14
053db960 15#include "utils.hpp"
5d7e8359 16
7809b6dd
SM
17namespace {
18
5d7e57e8
SM
19/*
20 * Creates a simple condition trigger, calling `func`.
21 */
22template <typename FuncT>
25fe6ea5
SM
23CondTrigger::UP makeSimpleTrigger(FuncT&& func, const CondTrigger::Type type,
24 const std::string& condId,
25 const bt2c::CStringView nameSuffix = {})
cc09350f 26{
25fe6ea5
SM
27 return bt2s::make_unique<SimpleCondTrigger>(std::forward<FuncT>(func), type, condId,
28 nameSuffix);
cc09350f
SM
29}
30
5d7e57e8 31using OnCompInitFunc = std::function<void(bt2::SelfComponent)>;
5d7e8359 32
5d7e57e8
SM
33/*
34 * A "run in" class that delegates the execution to stored callables.
35 *
36 * Use the makeRunIn*Trigger() helpers below.
37 */
38class RunInDelegator final : public RunIn
5d7e8359 39{
5d7e57e8
SM
40public:
41 static RunInDelegator makeOnCompInit(OnCompInitFunc func)
42 {
43 return RunInDelegator {std::move(func)};
44 }
5d7e8359 45
5d7e57e8
SM
46 void onCompInit(const bt2::SelfComponent self) override
47 {
48 if (_mOnCompInitFunc) {
49 _mOnCompInitFunc(self);
50 }
51 }
52
53private:
54 explicit RunInDelegator(OnCompInitFunc onCompInitFunc) :
55 _mOnCompInitFunc {std::move(onCompInitFunc)}
56 {
57 }
58
59 OnCompInitFunc _mOnCompInitFunc;
60};
61
62/*
63 * Creates a condition trigger, calling `func` in a component
64 * initialization context.
65 */
25fe6ea5
SM
66CondTrigger::UP makeRunInCompInitTrigger(OnCompInitFunc func, const CondTrigger::Type type,
67 const std::string& condId,
68 const bt2c::CStringView nameSuffix = {})
5d7e8359 69{
25fe6ea5
SM
70 return bt2s::make_unique<RunInCondTrigger<RunInDelegator>>(
71 RunInDelegator::makeOnCompInit(std::move(func)), type, condId, nameSuffix);
5d7e8359
PP
72}
73
5d7e57e8 74bt2::IntegerFieldClass::Shared createUIntFc(const bt2::SelfComponent self)
5d7e8359 75{
5d7e57e8 76 return self.createTraceClass()->createUnsignedIntegerFieldClass();
5d7e8359
PP
77}
78
25fe6ea5
SM
79} /* namespace */
80
81int main(const int argc, const char ** const argv)
82{
83 CondTriggers triggers;
84
85 triggers.emplace_back(makeSimpleTrigger(
5d7e57e8
SM
86 [] {
87 bt2::Graph::create(292);
88 },
25fe6ea5 89 CondTrigger::Type::PRE, "graph-create:valid-mip-version"));
5d7e57e8 90
25fe6ea5 91 triggers.emplace_back(makeRunInCompInitTrigger(
5d7e57e8
SM
92 [](const bt2::SelfComponent self) {
93 createUIntFc(self)->fieldValueRange(0);
94 },
25fe6ea5 95 CondTrigger::Type::PRE, "field-class-integer-set-field-value-range:valid-n", "0"));
5d7e57e8 96
25fe6ea5 97 triggers.emplace_back(makeRunInCompInitTrigger(
5d7e57e8
SM
98 [](const bt2::SelfComponent self) {
99 createUIntFc(self)->fieldValueRange(65);
100 },
25fe6ea5 101 CondTrigger::Type::PRE, "field-class-integer-set-field-value-range:valid-n", "gt-64"));
5d7e57e8 102
25fe6ea5 103 triggers.emplace_back(makeSimpleTrigger(
5d7e57e8
SM
104 [] {
105 bt_field_class_integer_set_field_value_range(nullptr, 23);
106 },
25fe6ea5 107 CondTrigger::Type::PRE, "field-class-integer-set-field-value-range:not-null:field-class"));
7809b6dd 108
6e3150f4 109 condMain(argc, argv, triggers);
5d7e8359 110}
This page took 0.043045 seconds and 4 git commands to generate.