ChimeraTK-ApplicationCore 04.06.00
Loading...
Searching...
No Matches
testConnectedDestructionRunner.cc
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3#include "Application.h"
4#include "ApplicationModule.h"
5#include "ArrayAccessor.h"
6#include "ScalarAccessor.h"
7#include "TestFacility.h"
8
9#include <ChimeraTK/BackendFactory.h>
10
11#include <boost/mpl/list.hpp>
12
13namespace ctk = ChimeraTK;
14
15#define BOOST_TEST_MODULE testConnectedDestructionRunner
16#include <boost/test/included/unit_test.hpp>
17
18// This test is meant to be run manual, each test individually since all of them terminate the process
19
20/**********************************************************************************************************************/
21
23 using ctk::ApplicationModule::ApplicationModule;
24
25 ctk::ScalarOutput<int> output{this, "/variable1", "", ""};
26 void mainLoop() override {}
27};
28
29/**********************************************************************************************************************/
30
32 using ctk::ApplicationModule::ApplicationModule;
33
34 ctk::ArrayOutput<int> output{this, "/variable1", "", 10, ""};
35 void mainLoop() override {}
36};
37
38/**********************************************************************************************************************/
39
41 using ctk::ApplicationModule::ApplicationModule;
42
43 ctk::ScalarPushInput<int> input{this, "/variable1", "", ""};
44 void mainLoop() override {}
45};
46
47/**********************************************************************************************************************/
48
50 using ctk::ApplicationModule::ApplicationModule;
51
52 ctk::ArrayPushInput<int> input{this, "/variable1", "", 10, ""};
53 void mainLoop() override {}
54};
55
56/**********************************************************************************************************************/
57
60 mod = std::make_unique<ScalarOutputModule>(this, "mod1", "");
61 }
63
64 std::unique_ptr<ScalarOutputModule> mod;
65 ScalarInputModule mod2{this, "mod2", ""};
66};
67
68/**********************************************************************************************************************/
69
72 mod = std::make_unique<ArrayOutputModule>(this, "mod1", "");
73 }
75
76 std::unique_ptr<ArrayOutputModule> mod;
77 ArrayInputModule mod2{this, "mod2", ""};
78};
79
80/**********************************************************************************************************************/
81
82BOOST_AUTO_TEST_CASE(testDestroyConnectedApplicationModule) {
83 std::cout << "*** testDestroyConnectedApplicationModule" << std::endl;
85
86 ctk::TestFacility tf{app, false};
87 tf.runApplication();
88 app.mod.reset();
89}
90
91/**********************************************************************************************************************/
92
93BOOST_AUTO_TEST_CASE(testDestroyConnectedApplicationModuleWithArray) {
94 std::cout << "*** testDestroyConnectedApplicationModuleWithArray" << std::endl;
96
97 ctk::TestFacility tf{app, false};
98 tf.runApplication();
99 app.mod.reset();
100}
101
102/**********************************************************************************************************************/
103
104BOOST_AUTO_TEST_CASE(testMoveConnectedApplicationModule) {
105 std::cout << "*** testDestroyMovedApplicationModule" << std::endl;
107
108 ScalarInputModule mod(&app, "test", "");
109 ctk::TestFacility tf{app, false};
110 tf.runApplication();
111 ScalarInputModule moved(std::move(mod));
112}
113
114/**********************************************************************************************************************/
115
116BOOST_AUTO_TEST_CASE(testMoveConnectedApplicationModuleWithArray) {
117 std::cout << "*** testDestroyMovedApplicationModuleWithArray" << std::endl;
119
120 ArrayInputModule mod(&app, "test", "");
121 ctk::TestFacility tf{app, false};
122 tf.runApplication();
123 ArrayInputModule moved(std::move(mod));
124}
125
126/**********************************************************************************************************************/
127/**********************************************************************************************************************/
128/**********************************************************************************************************************/
129
131 using ctk::VariableGroup::VariableGroup;
132
133 ctk::ScalarPushInput<int> output{this, "/variable1", "", ""};
134};
135
136/**********************************************************************************************************************/
137
140 mod2.group = std::make_unique<ScalarVariableGroup>(&mod2, "group", "");
141 }
142
143 ScalarInputModule mod{this, "mod", ""};
144 struct : public ctk::ApplicationModule {
145 using ctk::ApplicationModule::ApplicationModule;
146
147 std::unique_ptr<ScalarVariableGroup> group;
148 void mainLoop() override {}
149 } mod2{this, "mod", ""};
150};
151
152/**********************************************************************************************************************/
153
154BOOST_AUTO_TEST_CASE(testDestroyConnectedVariableGroupDelete) {
155 std::cout << "*** testDestroyConnectedVariableGroupDelete" << std::endl;
156
158 ctk::TestFacility tf{app, false};
159 tf.runApplication();
160 app.mod2.group.reset();
161}
162
163/**********************************************************************************************************************/
164
166 using ctk::VariableGroup::VariableGroup;
167
168 ctk::ArrayPushInput<int> output{this, "/variable1", "", 10, ""};
169};
170
171/**********************************************************************************************************************/
172
175 mod2.group = std::make_unique<ArrayVariableGroup>(&mod2, "group", "");
176 }
177
178 ArrayInputModule mod{this, "mod", ""};
179 struct : public ctk::ApplicationModule {
180 using ctk::ApplicationModule::ApplicationModule;
181
182 std::unique_ptr<ArrayVariableGroup> group;
183 void mainLoop() override {}
184 } mod2{this, "mod", ""};
185};
186
187/**********************************************************************************************************************/
188
189BOOST_AUTO_TEST_CASE(testDestroyConnectedVariableGroupArrayDelete) {
190 std::cout << "*** testDestroyConnectedVariableGroupArrayDelete" << std::endl;
191
193 ctk::TestFacility tf{app, false};
194 tf.runApplication();
195 app.mod2.group.reset();
196}
197
198/**********************************************************************************************************************/
199/**********************************************************************************************************************/
200/**********************************************************************************************************************/
201
204
205 ScalarInputModule mod{this, "mod", ""};
206 struct : public ctk::ApplicationModule {
207 using ctk::ApplicationModule::ApplicationModule;
208
209 ScalarVariableGroup group{this, "group", ""};
210 void mainLoop() override {}
211 } mod2{this, "mod", ""};
212};
213
214BOOST_AUTO_TEST_CASE(testMoveConnectedVariableGroup) {
215 std::cout << "*** testMoveConnectedVariableGroup" << std::endl;
216
218 ctk::TestFacility tf{app, false};
219 tf.runApplication();
220 app.mod2.group = ScalarVariableGroup(&app.mod2, "group2", "");
221}
222
223/**********************************************************************************************************************/
224
227
228 ArrayInputModule mod{this, "mod", ""};
229 struct : public ctk::ApplicationModule {
230 using ctk::ApplicationModule::ApplicationModule;
231
232 ArrayVariableGroup group{this, "group", ""};
233 void mainLoop() override {}
234 } mod2{this, "mod", ""};
235};
236
237/**********************************************************************************************************************/
238
239BOOST_AUTO_TEST_CASE(testMoveConnectedVariableGroupArray) {
240 std::cout << "*** testMoveConnectedVariableGroupArray" << std::endl;
241
243 ctk::TestFacility tf{app, false};
244 tf.runApplication();
245 app.mod2.group = ArrayVariableGroup(&app.mod2, "group2", "");
246}
void shutdown() override
This will remove the global pointer to the instance and allows creating another instance afterwards.
Convenience class for input array accessors with UpdateMode::push.
friend class Application
Definition ModuleGroup.h:47
Convenience class for input scalar accessors with UpdateMode::push.
Helper class to facilitate tests of applications based on ApplicationCore.
InvalidityTracer application module.
std::unique_ptr< ArrayOutputModule > mod
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ctk::ArrayPushInput< int > input
ctk::ArrayOutput< int > output
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ctk::ArrayPushInput< int > output
std::unique_ptr< ArrayVariableGroup > group
Convenience class for output array accessors (always UpdateMode::push)
Convenience class for output scalar accessors (always UpdateMode::push)
std::unique_ptr< ScalarOutputModule > mod
ctk::ScalarPushInput< int > input
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ctk::ScalarOutput< int > output
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ctk::ScalarPushInput< int > output
std::unique_ptr< ScalarVariableGroup > group
BOOST_AUTO_TEST_CASE(testDestroyConnectedApplicationModule)
void mainLoop() override