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