4#define BOOST_TEST_DYN_LINK
5#define BOOST_TEST_MODULE SharedDummyBackendUnifiedTest
11#include <boost/filesystem.hpp>
12#include <boost/interprocess/managed_shared_memory.hpp>
13#include <boost/test/unit_test.hpp>
22 using namespace boost::unit_test_framework;
26 std::string mapFileName{
"sharedDummyUnified.map"};
30 BOOST_AUTO_TEST_SUITE(SharedDummyBackendUnifiedTestSuite)
33 TestFixture() : argc(framework::master_test_suite().argc), argv(framework::master_test_suite().argv) {}
39 static void mirrorArea(
41 processVarsFrom.
read();
42 for(
size_t i = 0; i < processVarsFrom.
getNElements(); ++i) {
43 processVarsTo[i] = processVarsFrom[i];
45 processVarsTo.
write();
57 bool keepRunning =
true;
64 dev.
open(
"SHDMEMDEV");
73 BOOST_CHECK_EQUAL(processVarsFeature.
getNElements(), processVarsMirror.getNElements());
89 mirrorRequest_Busy.readLatest();
91 boost::this_thread::sleep_for(boost::chrono::milliseconds(50));
92 }
while(mirrorRequest_Busy == 0);
97 mirrorArea(processVarsMirror, processVarsFeature);
100 mirrorArea(processVarsFeature, processVarsMirror);
105 mirrorRequest_Updated.readLatest();
106 ++mirrorRequest_Updated;
107 mirrorRequest_Updated.write();
109 mirrorRequestUpdated_Interrupt = 1;
110 mirrorRequestUpdated_Interrupt.write();
112 mirrorRequest_Busy = 0;
113 mirrorRequest_Busy.write();
115 mirrorRequest_DataInterrupt.readLatest();
116 if(mirrorRequest_DataInterrupt == 1) {
117 dataInterrupt.write();
118 mirrorRequest_DataInterrupt = 0;
119 mirrorRequest_DataInterrupt.write();
121 }
while(keepRunning);
127 BOOST_AUTO_TEST_SUITE_END()
std::string getUserName()
Class allows to read/write registers from device.
bool isOpened() const
Check if the device is currently opened.
void close()
Close the device.
ScalarRegisterAccessor< UserType > getScalarRegisterAccessor(const RegisterPath ®isterPathName, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a ScalarRegisterObject object for the given register.
OneDRegisterAccessor< UserType > getOneDRegisterAccessor(const RegisterPath ®isterPathName, size_t numberOfWords=0, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a OneDRegisterAccessor object for the given register.
void open(std::string const &aliasName)
Open a device by the given alias name from the DMAP file.
Accessor class to read and write registers transparently by using the accessor object like a vector o...
unsigned int getNElements()
Return number of elements/samples in the register.
Accessor class to read and write scalar registers transparently by using the accessor object like a v...
bool readLatest()
Read the latest value, discarding any other update since the last read if present.
bool write(ChimeraTK::VersionNumber versionNumber={})
Write the data to device.
void read()
Read the data from the device.
std::size_t shmDummyInstanceIdHash(const std::string &address, const std::map< std::string, std::string > ¶meters)
Generates shm dummy instanceId hash from address and parameter map, Intended for use with parseDevice...
std::string createShmName(std::size_t instanceIdHash, const std::string &mapFileName, const std::string &userName)
Generates shm dummy name from parameter hashes.
void setDMapFilePath(std::string dmapFilePath)
Set the location of the dmap file.
bool shm_exists(std::string shmName)
BOOST_FIXTURE_TEST_CASE(testSlowReader, DeviceFixture)