4#define BOOST_TEST_MODULE testDataConsistencyAC
13#include <ChimeraTK/DataConsistencyGroup.h>
14#include <ChimeraTK/DataConsistencyGroupHistorizedMatcher.h>
16#include <boost/test/included/unit_test.hpp>
20 using namespace boost::unit_test_framework;
22 using MatchingMode = ChimeraTK::DataConsistencyGroup::MatchingMode;
44 auto diagnostic = [&](ChimeraTK::TransferElementAbstractor& a) {
45 return dynamic_cast<const ChimeraTK::DataConsistencyGroupDetail::HistorizedMatcher&
>(dGroup.getMatcher())
51 ChimeraTK::TransferElementID updatedId;
55 if(dGroup.update(updatedId)) {
56 std::cout <<
"ModuleA consistent, updated " << dGroup.getElements().at(updatedId).getName();
58 std::cout <<
", histIndex(in1,in2,in3)=" << diagnostic(
in1) <<
"," << diagnostic(
in2) <<
","
61 std::cout << std::endl;
66 updatedId = rag.readAny();
89 std::cout <<
"testHistorizedMatching" << std::endl;
93 auto in1 = testFacility.getVoid(
"/modA/in1");
94 auto in2 = testFacility.getScalar<
unsigned>(
"/modA/in2");
95 auto in3 = testFacility.getArray<
unsigned>(
"/modA/in3");
96 auto out1 = testFacility.getScalar<
unsigned>(
"/modA/out1");
97 auto out2 = testFacility.getScalar<
unsigned>(
"/modA/out2");
99 testFacility.runApplication();
101 ChimeraTK::VersionNumber vn;
107 testFacility.stepApplication();
108 BOOST_TEST(out1.readLatest() ==
false);
112 testFacility.stepApplication();
113 BOOST_TEST(out1.readLatest() ==
true);
115 BOOST_TEST(out2 == 10);
119 ChimeraTK::VersionNumber vn2;
122 ChimeraTK::VersionNumber vn3;
124 in2.setDataValidity(ChimeraTK::DataValidity::faulty);
128 testFacility.stepApplication();
129 BOOST_TEST(out2.readLatest() ==
true);
130 BOOST_TEST(out2 == 11);
133 BOOST_TEST(out2.getVersionNumber() == vn2);
135 BOOST_TEST(testApp.modA.out2.getVersionNumber() == vn2);
138 BOOST_TEST(out2.dataValidity() == ChimeraTK::DataValidity::ok);
140 BOOST_TEST(testApp.modA.out2.dataValidity() == ChimeraTK::DataValidity::ok);
143 in2.setDataValidity(ChimeraTK::DataValidity::faulty);
145 testFacility.stepApplication();
151 std::cout <<
"testExactMatching" << std::endl;
152 testApp.modA.matchingMode = MatchingMode::exact;
154 auto in1 = testFacility.getVoid(
"/modA/in1");
155 auto in2 = testFacility.getScalar<
unsigned>(
"/modA/in2");
156 auto in3 = testFacility.getArray<
unsigned>(
"/modA/in3");
157 auto out1 = testFacility.getScalar<
unsigned>(
"/modA/out1");
158 auto out2 = testFacility.getScalar<
unsigned>(
"/modA/out2");
160 testFacility.runApplication();
163 ChimeraTK::VersionNumber vn10;
166 ChimeraTK::VersionNumber vn11;
171 testFacility.stepApplication();
172 BOOST_TEST(out2.readLatest() ==
false);
177 testFacility.stepApplication();
178 BOOST_TEST(out2.readLatest() ==
true);
209 std::cout <<
"ModuleIVConsumer initial vns: data.vn=" <<
data.getVersionNumber()
210 <<
" trigger.vn=" <<
trigger.getVersionNumber() << std::endl;
212 ChimeraTK::DataConsistencyGroup dGroup(
213 {
data,
trigger}, ChimeraTK::DataConsistencyGroup::MatchingMode::historized);
214 assert(
data[1] == 1);
215 assert(!dGroup.isConsistent());
217 ChimeraTK::TransferElementID updatedId;
219 updatedId = rag.readAny();
221 auto& a = li.getAppAccessorNoType();
222 if(a.getId() == updatedId) {
223 std::cout <<
" updated=" << a.getName() <<
" vn=" << a.getVersionNumber()
227 std::cout <<
"data[0,1] = " <<
data[0] <<
" " <<
data[1] << std::endl;
228 dGroup.update(updatedId);
229 ok = dGroup.isConsistent() &&
data[1] == 1;
248 std::cout <<
"testHistorizedInitialVals" << std::endl;
254 auto trigger = testFacility.getScalar<
unsigned>(
"/trigger");
256 testFacility.runApplication();
259 auto isOk = testFacility.getScalar<ChimeraTK::Boolean>(
"/ok");
261 BOOST_TEST(isOk ==
true);
void shutdown() override
This will remove the global pointer to the instance and allows creating another instance afterwards.
ApplicationModule()=default
Default constructor: Allows late initialisation of modules (e.g.
VersionNumber getCurrentVersionNumber() const override
Return the current version number which has been received with the last push-type read operation.
bool writeDestructively(ChimeraTK::VersionNumber versionNumber)=delete
Convenience class for output array accessors (always UpdateMode::push)
std::list< VariableNetworkNode > getAccessorListRecursive() const
Obtain the list of accessors/variables associated with this instance and any submodules.
void writeAllDestructively(bool includeReturnChannels=false)
Just call writeDestructively() on all writable variables in the group.
ChimeraTK::ReadAnyGroup readAnyGroup()
Create a ChimeraTK::ReadAnyGroup for all readable variables in this Module.
Convenience class for output scalar accessors (always UpdateMode::push)
Helper class to facilitate tests of applications based on ApplicationCore.
InvalidityTracer application module.
ChimeraTK::DataConsistencyGroup::MatchingMode MatchingMode
BOOST_FIXTURE_TEST_CASE(testHistorizedMatching, TestFixture)
ChimeraTK::ScalarOutput< unsigned > out1
ChimeraTK::ScalarOutput< unsigned > out2
ChimeraTK::ArrayPushInput< unsigned > in3
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ModuleA(ChimeraTK::ModuleGroup *owner)
ChimeraTK::ScalarPushInput< unsigned > in2
MatchingMode matchingMode
ModuleIVConsumer(ChimeraTK::ModuleGroup *owner)
ChimeraTK::ArrayPushInput< unsigned > data
ChimeraTK::ScalarOutput< ChimeraTK::Boolean > ok
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ChimeraTK::ScalarPushInput< unsigned > trigger
ChimeraTK::ArrayOutput< unsigned > data
void mainLoop() override
To be implemented by the user: function called in a separate thread executing the main loop of the mo...
ChimeraTK::ScalarPushInput< unsigned > trigger
ModuleIVProvider(ChimeraTK::ModuleGroup *owner)
ChimeraTK::TestFacility testFacility
Tests::testDataConsistencyAC::TestFixture::Server testApp
Tests::testDataConsistencyAC::TestFixtureIV::Server testApp
ChimeraTK::TestFacility testFacility