249 std::cout <<
"*** testRealisticExample" << std::endl;
252 app.
a = {&app,
".",
""};
253 app.
b = {&app,
".",
""};
254 app.
copy = {&app,
".",
""};
258 auto var1_copied = test.
getScalar<
int>(
"var1_out");
259 auto var2 = test.
getScalar<
double>(
"var2");
260 auto var3 = test.
getScalar<
double>(
"var3");
261 auto max = test.
getScalar<
double>(
"max");
277 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 49);
278 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 49 * 2.54, 0.001);
279 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 49 * 2.54, 0.001);
280 BOOST_CHECK(var1.readNonBlocking() ==
false);
281 BOOST_CHECK(var1_copied.readLatest() ==
false);
282 BOOST_CHECK(var2.readNonBlocking() ==
false);
283 BOOST_CHECK(var3.readNonBlocking() ==
false);
290 BOOST_CHECK_EQUAL(
static_cast<int>(var1), 49);
292 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 50);
294 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 49);
296 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 50 * 2.54, 0.001);
298 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 49.5 * 2.54, 0.001);
300 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 49 * 2.54, 0.001);
302 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 49.5 * 2.54, 0.001);
304 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 49 * 2.54, 0.001);
305 BOOST_CHECK(var1.readNonBlocking() ==
false);
306 BOOST_CHECK(var1_copied.readLatest() ==
false);
307 BOOST_CHECK(var2.readNonBlocking() ==
false);
308 BOOST_CHECK(var3.readNonBlocking() ==
false);
315 BOOST_CHECK_EQUAL(
static_cast<int>(var1), 48);
317 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 48);
319 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 48.5 * 2.54, 0.001);
321 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 48 * 2.54, 0.001);
323 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 48.5 * 2.54, 0.001);
325 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 48 * 2.54, 0.001);
326 BOOST_CHECK(var1.readNonBlocking() ==
false);
327 BOOST_CHECK(var1_copied.readLatest() ==
false);
328 BOOST_CHECK(var2.readNonBlocking() ==
false);
329 BOOST_CHECK(var3.readNonBlocking() ==
false);
334 for(
size_t i = 0; i < 10; ++i) {
344 var1_copied.readLatest();
347 BOOST_CHECK_EQUAL(
static_cast<int>(var1), 48);
348 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 48);
349 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 48 * 2.54, 0.001);
350 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 48 * 2.54, 0.001);
351 BOOST_CHECK(var1.readNonBlocking() ==
false);
352 BOOST_CHECK(var1_copied.readLatest() ==
false);
353 BOOST_CHECK(var2.readNonBlocking() ==
false);
354 BOOST_CHECK(var3.readNonBlocking() ==
false);
366 BOOST_CHECK_EQUAL(
static_cast<int>(var1), 25);
368 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 30);
369 BOOST_CHECK(var1_copied.readLatest() ==
true);
370 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 25);
371 BOOST_CHECK(var2.readLatest() ==
true);
372 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 25 * 2.54, 0.001);
373 BOOST_CHECK(var3.readLatest() ==
true);
374 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 25 * 2.54, 0.001);
375 BOOST_CHECK(var1.readNonBlocking() ==
false);
376 BOOST_CHECK(var1_copied.readLatest() ==
false);
377 BOOST_CHECK(var2.readNonBlocking() ==
false);
378 BOOST_CHECK(var3.readNonBlocking() ==
false);
387 BOOST_CHECK_EQUAL(
static_cast<int>(var1_copied), 15);
388 BOOST_CHECK(var2.readLatest() ==
true);
389 BOOST_CHECK_CLOSE(
static_cast<double>(var2), 15 * 2.54, 0.001);
390 BOOST_CHECK(var3.readLatest() ==
true);
391 BOOST_CHECK_CLOSE(
static_cast<double>(var3), 15 * 2.54, 0.001);
392 BOOST_CHECK(var1.readNonBlocking() ==
false);
393 BOOST_CHECK(var1_copied.readLatest() ==
false);
394 BOOST_CHECK(var2.readNonBlocking() ==
false);
395 BOOST_CHECK(var3.readNonBlocking() ==
false);
402 std::cout <<
"*** testFunnel" << std::endl;
409 auto funnel1out = test.
getScalar<
int>(
"/Funnel1/var1out");
410 auto funnel1in = test.
getScalar<
int>(
"/Funnel1/var1in");
411 auto funnel2out = test.
getScalar<
int>(
"/Funnel2/var1out");
412 auto funnel2in = test.
getScalar<
int>(
"/Funnel2/var1in");
417 funnel1out.readLatest();
418 funnel2out.readLatest();
420 var1.setAndWrite(42);
422 BOOST_TEST(!var1.readNonBlocking());
423 BOOST_TEST(funnel1out.readNonBlocking());
424 BOOST_TEST(funnel1out == 42);
425 BOOST_TEST(funnel2out.readNonBlocking());
426 BOOST_TEST(funnel2out == 42);
428 funnel1in.setAndWrite(43);
430 BOOST_TEST(!funnel1out.readNonBlocking());
431 BOOST_TEST(var1.readNonBlocking());
432 BOOST_TEST(var1 == 43);
433 BOOST_TEST(funnel2out.readNonBlocking());
434 BOOST_TEST(funnel2out == 43);
436 funnel2in.setAndWrite(44);
438 BOOST_TEST(!funnel2out.readNonBlocking());
439 BOOST_TEST(var1.readNonBlocking());
440 BOOST_TEST(var1 == 44);
441 BOOST_TEST(funnel1out.readNonBlocking());
442 BOOST_TEST(funnel1out == 44);
520 std::cout <<
"*** testDataValidityReturn" << std::endl;
527 test.runApplication();
528 assert(app.
lower.getDataValidity() == ctk::DataValidity::ok);
530 app.
upper.incrementDataFaultCounter();
532 app.
upper.var.write();
533 app.
upper.decrementDataFaultCounter();
534 app.
lower.var.read();
535 BOOST_CHECK(app.
lower.var.dataValidity() == ctk::DataValidity::faulty);
536 BOOST_CHECK(app.
lower.getDataValidity() == ctk::DataValidity::faulty);
544 test.runApplication();
545 assert(app.
upper.getDataValidity() == ctk::DataValidity::ok);
546 app.
lower.incrementDataFaultCounter();
548 app.
lower.var.write();
549 app.
upper.var.read();
550 BOOST_CHECK(app.
upper.var.dataValidity() == ctk::DataValidity::ok);
551 BOOST_CHECK(app.
upper.getDataValidity() == ctk::DataValidity::ok);
552 app.
lower.decrementDataFaultCounter();
556 app.
lower.var.setDataValidity(ctk::DataValidity::faulty);
557 app.
lower.var.write();
558 app.
upper.var.read();
559 BOOST_CHECK(app.
upper.var.dataValidity() == ctk::DataValidity::faulty);
560 BOOST_CHECK(app.
upper.getDataValidity() == ctk::DataValidity::faulty);