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