X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=tests%2Flib%2Fconds%2Fconds-triggers.cpp;h=857cfbcc59284764ef82018c13f0714ae14a1a4b;hb=fb472529347b066d5b60f9e4f1d2554ecb733aca;hp=343c2be64fc9644760c3853939f6493870576201;hpb=6e3150f48c1dc98e80fdf539af64eb313faee2cd;p=babeltrace.git diff --git a/tests/lib/conds/conds-triggers.cpp b/tests/lib/conds/conds-triggers.cpp index 343c2be6..857cfbcc 100644 --- a/tests/lib/conds/conds-triggers.cpp +++ b/tests/lib/conds/conds-triggers.cpp @@ -4,52 +4,108 @@ * Copyright (C) 2020 Philippe Proulx */ +#include + #include +#include "cpp-common/bt2/graph.hpp" +#include "cpp-common/bt2c/c-string-view.hpp" +#include "cpp-common/bt2c/span.hpp" +#include "cpp-common/bt2s/make-unique.hpp" + #include "utils.hpp" namespace { -void triggerGraphMipVersion() noexcept +/* + * Creates a simple condition trigger, calling `func`. + */ +template +CondTrigger::UP makeSimpleTrigger(FuncT&& func, const CondTrigger::Type type, + const std::string& condId, + const bt2c::CStringView nameSuffix = {}) { - bt_graph_create(292); + return bt2s::make_unique(std::forward(func), type, condId, + nameSuffix); } -bt2::IntegerFieldClass::Shared getUIntFc(const bt2::SelfComponent self) noexcept -{ - return self.createTraceClass()->createUnsignedIntegerFieldClass(); -} +using OnCompInitFunc = std::function; -void triggerFcIntSetFieldValueRangeN0(const bt2::SelfComponent self) noexcept +/* + * A "run in" class that delegates the execution to stored callables. + * + * Use the makeRunIn*Trigger() helpers below. + */ +class RunInDelegator final : public RunIn { - getUIntFc(self)->fieldValueRange(0); -} +public: + static RunInDelegator makeOnCompInit(OnCompInitFunc func) + { + return RunInDelegator {std::move(func)}; + } + + void onCompInit(const bt2::SelfComponent self) override + { + if (_mOnCompInitFunc) { + _mOnCompInitFunc(self); + } + } + +private: + explicit RunInDelegator(OnCompInitFunc onCompInitFunc) : + _mOnCompInitFunc {std::move(onCompInitFunc)} + { + } -void triggerFcIntSetFieldValueRangeNGt64(const bt2::SelfComponent self) noexcept + OnCompInitFunc _mOnCompInitFunc; +}; + +/* + * Creates a condition trigger, calling `func` in a component + * initialization context. + */ +CondTrigger::UP makeRunInCompInitTrigger(OnCompInitFunc func, const CondTrigger::Type type, + const std::string& condId, + const bt2c::CStringView nameSuffix = {}) { - getUIntFc(self)->fieldValueRange(65); + return bt2s::make_unique>( + RunInDelegator::makeOnCompInit(std::move(func)), type, condId, nameSuffix); } -void triggerFcIntSetFieldValueRangeNull(bt2::SelfComponent) noexcept +bt2::IntegerFieldClass::Shared createUIntFc(const bt2::SelfComponent self) { - bt_field_class_integer_set_field_value_range(NULL, 23); + return self.createTraceClass()->createUnsignedIntegerFieldClass(); } -const cond_trigger triggers[] = { - COND_TRIGGER_PRE_BASIC("pre:graph-create:valid-mip-version", NULL, triggerGraphMipVersion), - COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT("pre:field-class-integer-set-field-value-range:valid-n", - "0", triggerFcIntSetFieldValueRangeN0), - COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT("pre:field-class-integer-set-field-value-range:valid-n", - "gt-64", triggerFcIntSetFieldValueRangeNGt64), - COND_TRIGGER_PRE_RUN_IN_COMP_CLS_INIT( - "pre:field-class-integer-set-field-value-range:not-null:field-class", NULL, - triggerFcIntSetFieldValueRangeNull), -}; - } /* namespace */ -int main(int argc, const char *argv[]) +int main(const int argc, const char ** const argv) { - condMain(argc, argv, triggers); - return 0; + CondTriggers triggers; + + triggers.emplace_back(makeSimpleTrigger( + [] { + bt2::Graph::create(292); + }, + CondTrigger::Type::PRE, "graph-create:valid-mip-version")); + + triggers.emplace_back(makeRunInCompInitTrigger( + [](const bt2::SelfComponent self) { + createUIntFc(self)->fieldValueRange(0); + }, + CondTrigger::Type::PRE, "field-class-integer-set-field-value-range:valid-n", "0")); + + triggers.emplace_back(makeRunInCompInitTrigger( + [](const bt2::SelfComponent self) { + createUIntFc(self)->fieldValueRange(65); + }, + CondTrigger::Type::PRE, "field-class-integer-set-field-value-range:valid-n", "gt-64")); + + triggers.emplace_back(makeSimpleTrigger( + [] { + bt_field_class_integer_set_field_value_range(nullptr, 23); + }, + CondTrigger::Type::PRE, "field-class-integer-set-field-value-range:not-null:field-class")); + + condMain(bt2c::makeSpan(argv, argc), triggers); }