171 for(
auto& value : a1) {
177 BOOST_CHECK(standalone[0] == 0x77);
178 BOOST_CHECK(standalone[1] == 0x77);
181 for(
auto& value : a1) {
188 for(
int i = 0; i < 2; ++i) {
191 for(
auto& value : a1) {
192 BOOST_CHECK(value == 0xFF);
195 BOOST_CHECK(standalone[0] == 0xFF);
196 BOOST_CHECK(standalone[1] == 0xFF);
200 standalone[0] = 0xAA;
201 standalone[1] = 0xAA;
204 for(
int i = 0; i < 2; ++i) {
206 for(
auto& value : a1) {
207 BOOST_CHECK(value == 0xAA);
211 standalone[0] = 0xAB;
212 standalone[1] = 0xAB;
217 for(
auto& value : a1) {
218 BOOST_CHECK(value == 0xAB);
222 BOOST_CHECK(standalone[0] == 0xAB);
223 BOOST_CHECK(standalone[1] == 0xAB);
226 for(
auto& value : a2) {
233 group.addAccessor(a2);
234 for(
auto& value : a1) {
237 for(
auto& value : a2) {
241 for(
int i = 0; i < 2; ++i) {
243 for(
auto& value : a1) {
244 BOOST_CHECK(value == 0xFD);
246 for(
auto& value : a2) {
247 BOOST_CHECK(value == 0xFE);
250 BOOST_CHECK(standalone[0] == 0xFD);
251 BOOST_CHECK(standalone[1] == 0xFD);
252 BOOST_CHECK(standalone[2] == 0xFE);
253 BOOST_CHECK(standalone[3] == 0xFE);
256 standalone[0] = 0xA1;
257 standalone[1] = 0xA2;
258 standalone[2] = 0xA3;
259 standalone[3] = 0xA4;
264 BOOST_CHECK(a1[0] == 0xA1);
265 BOOST_CHECK(a1[1] == 0xA2);
266 BOOST_CHECK(a2[0] == 0xA3);
267 BOOST_CHECK(a2[1] == 0xA4);
270 BOOST_CHECK(standalone[0] == 0xA1);
271 BOOST_CHECK(standalone[1] == 0xA2);
272 BOOST_CHECK(standalone[2] == 0xA3);
273 BOOST_CHECK(standalone[3] == 0xA4);
285 const char* deviceDescriptor =
"(dummy?map=goodMapFile.map)";
295 auto user1Dummy = dummyBackend->getRawAccessor(
"MODULE0",
"WORD_USER1");
299 auto bufferLock = user1Dummy.getBufferLock();
306 BOOST_CHECK_CLOSE(
float(user1Coocked), 2148.125, 0.0001);
309 user1Coocked.write();
312 auto bufferLock = user1Dummy.getBufferLock();
313 BOOST_CHECK_EQUAL(int32_t(user1Dummy), 0xfff8);
319 BOOST_CHECK_EQUAL(int32_t(user1Raw), 0xfff8);
320 BOOST_CHECK_CLOSE(user1Raw.getAsCooked<
float>(), -1, 0.0001);
322 user1Raw.setAsCooked(-2.5);
327 auto bufferLock = user1Dummy.getBufferLock();
328 BOOST_CHECK_EQUAL(int32_t(user1Dummy), 0xffec);
333 user1CoockedInt.read();
335 BOOST_CHECK_EQUAL(
int(user1CoockedInt), -3);
337 user1CoockedInt = 16;
338 user1CoockedInt.write();
341 auto bufferLock = user1Dummy.getBufferLock();
342 BOOST_CHECK_EQUAL(int32_t(user1Dummy), 0x80);
348 auto floatTestDummy = dummyBackend->getRawAccessor(
"FLOAT_TEST",
"ARRAY");
350 float testValue = 1.1;
352 auto bufferLock = floatTestDummy.getBufferLock();
353 floatTestDummy[0] = std::bit_cast<int32_t>(testValue);
355 floatTestDummy[1] = std::bit_cast<int32_t>(testValue);
357 floatTestDummy[2] = std::bit_cast<int32_t>(testValue);
359 floatTestDummy[3] = std::bit_cast<int32_t>(testValue);
363 floatTestCoocked.read();
365 BOOST_CHECK_CLOSE(floatTestCoocked[0], 1.1, 0.0001);
366 BOOST_CHECK_CLOSE(floatTestCoocked[1], 2.2, 0.0001);
367 BOOST_CHECK_CLOSE(floatTestCoocked[2], 3.3, 0.0001);
368 BOOST_CHECK_CLOSE(floatTestCoocked[3], 4.4, 0.0001);
370 floatTestCoocked[3] = 44.4;
371 floatTestCoocked.write();
374 auto bufferLock = floatTestDummy.getBufferLock();
375 testValue = std::bit_cast<float>(floatTestDummy[3]);
377 BOOST_CHECK_CLOSE(testValue, 44.4, 0.0001);
382 testValue = std::bit_cast<float>(floatTestRaw[2]);
384 BOOST_CHECK_CLOSE(testValue, 3.3, 0.0001);
385 BOOST_CHECK_CLOSE(floatTestRaw.getAsCooked<
float>(0), 1.1, 0.0001);
387 floatTestRaw.setAsCooked(0, -2.5);
389 floatTestRaw.write();
392 auto bufferLock = floatTestDummy.getBufferLock();
393 testValue = std::bit_cast<float>(floatTestDummy[0]);
395 BOOST_CHECK_CLOSE(testValue, -2.5, 0.0001);
399 floatTestCoockedInt.read();
401 BOOST_CHECK_EQUAL(floatTestCoockedInt[0], -3);
402 BOOST_CHECK_EQUAL(floatTestCoockedInt[1], 2);
403 BOOST_CHECK_EQUAL(floatTestCoockedInt[2], 3);
404 BOOST_CHECK_EQUAL(floatTestCoockedInt[3], 44);
406 floatTestCoockedInt[1] = 16;
407 floatTestCoockedInt.write();
410 auto bufferLock = floatTestDummy.getBufferLock();
411 testValue = std::bit_cast<float>(floatTestDummy[1]);
413 BOOST_CHECK_CLOSE(testValue, 16.0, 0.001);
450 auto mux0i = boost::dynamic_pointer_cast<NDRegisterAccessor<int>>(mux0.getHighLevelImplElement());
451 auto mux1i = boost::dynamic_pointer_cast<NDRegisterAccessor<int>>(mux1.getHighLevelImplElement());
452 auto mux2i = boost::dynamic_pointer_cast<NDRegisterAccessor<int>>(mux2.getHighLevelImplElement());
453 auto mux3i = boost::dynamic_pointer_cast<NDRegisterAccessor<int>>(mux3.getHighLevelImplElement());
456 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] != mux1i->getHardwareAccessingElements()[0]);
457 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] != mux2i->getHardwareAccessingElements()[0]);
458 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] != mux3i->getHardwareAccessingElements()[0]);
459 BOOST_CHECK(mux1i->getHardwareAccessingElements()[0] != mux2i->getHardwareAccessingElements()[0]);
460 BOOST_CHECK(mux1i->getHardwareAccessingElements()[0] != mux3i->getHardwareAccessingElements()[0]);
461 BOOST_CHECK(mux2i->getHardwareAccessingElements()[0] != mux3i->getHardwareAccessingElements()[0]);
465 llelem = boost::static_pointer_cast<NumericAddressedLowLevelTransferElement>(mux0i->getHardwareAccessingElements()[0])
469 llelem = boost::static_pointer_cast<NumericAddressedLowLevelTransferElement>(mux1i->getHardwareAccessingElements()[0])
473 llelem = boost::static_pointer_cast<NumericAddressedLowLevelTransferElement>(mux2i->getHardwareAccessingElements()[0])
477 llelem = boost::static_pointer_cast<NumericAddressedLowLevelTransferElement>(mux3i->getHardwareAccessingElements()[0])
491 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] == mux1i->getHardwareAccessingElements()[0]);
492 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] == mux2i->getHardwareAccessingElements()[0]);
493 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] == mux3i->getHardwareAccessingElements()[0]);
496 llelem = boost::static_pointer_cast<NumericAddressedLowLevelTransferElement>(mux0i->getHardwareAccessingElements()[0])
509 BOOST_CHECK(mux0b == 42);
511 BOOST_CHECK(mux1b == 120);
513 BOOST_CHECK(mux2b == 84);
515 BOOST_CHECK(mux3b == 240);
520 BOOST_CHECK(mux0 == 123);
521 BOOST_CHECK(mux1 == 120);
522 BOOST_CHECK(mux2 == 84);
523 BOOST_CHECK(mux3 == 240);
528 BOOST_CHECK(mux0 == 123);
529 BOOST_CHECK(mux1 == 234);
530 BOOST_CHECK(mux2 == 84);
531 BOOST_CHECK(mux3 == 240);
536 BOOST_CHECK(mux0 == 123);
537 BOOST_CHECK(mux1 == 234);
538 BOOST_CHECK(mux2 == 345);
539 BOOST_CHECK(mux3 == 240);
544 BOOST_CHECK(mux0 == 123);
545 BOOST_CHECK(mux1 == 234);
546 BOOST_CHECK(mux2 == 345);
547 BOOST_CHECK(mux3 == 456);
572 auto mux0i = boost::dynamic_pointer_cast<NDRegisterAccessor<uint16_t>>(mux0.getHighLevelImplElement());
573 auto mux1i = boost::dynamic_pointer_cast<NDRegisterAccessor<uint16_t>>(mux1.getHighLevelImplElement());
574 auto mux2i = boost::dynamic_pointer_cast<NDRegisterAccessor<int32_t>>(mux2.getHighLevelImplElement());
575 auto mux3i = boost::dynamic_pointer_cast<NDRegisterAccessor<int64_t>>(mux3.getHighLevelImplElement());
578 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] != mux1i->getHardwareAccessingElements()[0]);
579 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] != mux2i->getHardwareAccessingElements()[0]);
580 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] != mux3i->getHardwareAccessingElements()[0]);
581 BOOST_CHECK(mux1i->getHardwareAccessingElements()[0] != mux2i->getHardwareAccessingElements()[0]);
582 BOOST_CHECK(mux1i->getHardwareAccessingElements()[0] != mux3i->getHardwareAccessingElements()[0]);
583 BOOST_CHECK(mux2i->getHardwareAccessingElements()[0] != mux3i->getHardwareAccessingElements()[0]);
594 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] == mux1i->getHardwareAccessingElements()[0]);
595 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] == mux2i->getHardwareAccessingElements()[0]);
596 BOOST_CHECK(mux0i->getHardwareAccessingElements()[0] == mux3i->getHardwareAccessingElements()[0]);
613 BOOST_CHECK(mux0b == 42);
615 BOOST_CHECK(mux1b == 120);
617 BOOST_CHECK(mux2b == 84);
619 BOOST_CHECK(mux3b == 240);
624 BOOST_CHECK(mux0 == 123);
625 BOOST_CHECK(mux1 == 120);
626 BOOST_CHECK(mux2 == 84);
627 BOOST_CHECK(mux3 == 240);
632 BOOST_CHECK(mux0 == 123);
633 BOOST_CHECK(mux1 == 234);
634 BOOST_CHECK(mux2 == 84);
635 BOOST_CHECK(mux3 == 240);
640 BOOST_CHECK(mux0 == 123);
641 BOOST_CHECK(mux1 == 234);
642 BOOST_CHECK(mux2 == 345);
643 BOOST_CHECK(mux3 == 240);
648 BOOST_CHECK(mux0 == 123);
649 BOOST_CHECK(mux1 == 234);
650 BOOST_CHECK(mux2 == 345);
651 BOOST_CHECK(mux3 == 456);