X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/15b74519f0eb2f7804b3d7f83871bfd461fd7fe7..5de3338f084047331e524db3f50c904fde1f73b9:/teshsuite/s4u/activity-lifecycle/testing_test-wait.cpp diff --git a/teshsuite/s4u/activity-lifecycle/testing_test-wait.cpp b/teshsuite/s4u/activity-lifecycle/testing_test-wait.cpp index f8430d20bd..2b8f82fe20 100644 --- a/teshsuite/s4u/activity-lifecycle/testing_test-wait.cpp +++ b/teshsuite/s4u/activity-lifecycle/testing_test-wait.cpp @@ -41,7 +41,7 @@ template bool tester_wait(const Activity& acti ret = true; } catch (const simgrid::TimeoutException& e) { XBT_DEBUG("wait_for() timed out (%s)", e.what()); - INFO("wait_for() timeout should expire at expected date: " << timeout); + INFO("wait_for() timeout should expire at expected date: " + std::to_string(timeout)); REQUIRE(simgrid::s4u::Engine::get_clock() == Approx(timeout)); ret = false; } catch (const simgrid::Exception& e) { @@ -53,6 +53,35 @@ template bool tester_wait(const Activity& acti return ret; } +// Calls wait_any_for([activity], Duration / 128.0) and returns true when activity is terminated, just like test() +template bool tester_wait_any(const Activity& activity) +{ + constexpr double duration = Duration / 128.0; + const double timeout = simgrid::s4u::Engine::get_clock() + duration; + bool ret; + try { + std::vector activities = {activity}; + XBT_DEBUG("calling wait_any_for(%f)", duration); + int index = Activity::element_type::wait_any_for(&activities, duration); + if (index == -1) { + XBT_DEBUG("wait_any_for() timed out"); + INFO("wait_any_for() timeout should expire at expected date: " << timeout); + REQUIRE(simgrid::s4u::Engine::get_clock() == Approx(timeout)); + ret = false; + } else { + XBT_DEBUG("wait_any_for() returned index %d", index); + REQUIRE(index == 0); + ret = true; + } + } catch (const simgrid::Exception& e) { + XBT_DEBUG("wait_any_for() threw an exception: %s", e.what()); + ret = true; + } + INFO("wait_any_for() should return before timeout expiration at date: " << timeout); + REQUIRE(simgrid::s4u::Engine::get_clock() <= Approx(timeout)); + return ret; +} + //========== Waiters: wait for the completion of an activity template using waiter_type = void (*)(const Activity&); @@ -195,12 +224,16 @@ TEST_CASE("Activity test/wait: using >") XBT_INFO("#####[ launch next test ]#####"); RUN_SECTION("exec: run and wait<0> once", test_trivial>); - // exec: run and wait<0> many + RUN_SECTION("exec: run and wait<0> many", test_basic>); RUN_SECTION("exec: cancel and wait<0>", test_cancel>); - // exec: actor failure and wait<0> / sleep - // exec: host failure and wait<0> / sleep - // exec: actor failure and wait<0> / wait - // exec: host failure and wait<0> / wait + RUN_SECTION("exec: actor failure and wait<0> / sleep", + test_failure_actor, waiter_sleep6>); + RUN_SECTION("exec: host failure and wait<0> / sleep", + test_failure_host, waiter_sleep6>); + RUN_SECTION("exec: actor failure and wait<0> / wait", + test_failure_actor, waiter_wait>); + RUN_SECTION("exec: host failure and wait<0> / wait", + test_failure_host, waiter_wait>); simgrid::s4u::this_actor::sleep_for(10); assert_cleanup(); @@ -211,36 +244,8 @@ TEST_CASE("Activity test/wait: using >") XBT_INFO("#####[ launch next test ]#####"); RUN_SECTION("exec: run and wait<1> once", test_trivial>); - // exec: run and wait<1> many - RUN_SECTION("exec: cancel and wait<1>", test_cancel>); - // exec: actor failure and wait<1> / sleep - // exec: host failure and wait<1> / sleep - // exec: actor failure and wait<1> / wait - // exec: host failure and wait<1> / wait - - simgrid::s4u::this_actor::sleep_for(10); - assert_cleanup(); -} - -// FIXME: The tests grouped here are currently failing. Once fixed, they should be put in the right section above. -// The tests can be activated with run-time parameter '*' or, more specifically '[failing]' -TEST_CASE("Activity test/wait: tests currently failing", "[.][failing]") -{ - XBT_INFO("#####[ launch next failing test ]#####"); - - // with tester_wait<0> - RUN_SECTION("exec: run and wait<0> many", test_basic>); - RUN_SECTION("exec: actor failure and wait<0> / sleep", - test_failure_actor, waiter_sleep6>); - RUN_SECTION("exec: host failure and wait<0> / sleep", - test_failure_host, waiter_sleep6>); - RUN_SECTION("exec: actor failure and wait<0> / wait", - test_failure_actor, waiter_wait>); - RUN_SECTION("exec: host failure and wait<0> / wait", - test_failure_host, waiter_wait>); - - // with tester_wait<1> RUN_SECTION("exec: run and wait<1> many", test_basic>); + RUN_SECTION("exec: cancel and wait<1>", test_cancel>); RUN_SECTION("exec: actor failure and wait<1> / sleep", test_failure_actor, waiter_sleep6>); RUN_SECTION("exec: host failure and wait<1> / sleep", @@ -253,3 +258,43 @@ TEST_CASE("Activity test/wait: tests currently failing", "[.][failing]") simgrid::s4u::this_actor::sleep_for(10); assert_cleanup(); } + +TEST_CASE("Activity test/wait: using >") +{ + XBT_INFO("#####[ launch next test ]#####"); + + RUN_SECTION("exec: run and wait_any<0> once", test_trivial>); + RUN_SECTION("exec: run and wait_any<0> many", test_basic>); + RUN_SECTION("exec: cancel and wait_any<0>", test_cancel>); + RUN_SECTION("exec: actor failure and wait_any<0> / sleep", + test_failure_actor, waiter_sleep6>); + RUN_SECTION("exec: host failure and wait_any<0> / sleep", + test_failure_host, waiter_sleep6>); + RUN_SECTION("exec: actor failure and wait_any<0> / wait", + test_failure_actor, waiter_wait>); + RUN_SECTION("exec: host failure and wait_any<0> / wait", + test_failure_host, waiter_wait>); + + simgrid::s4u::this_actor::sleep_for(10); + assert_cleanup(); +} + +TEST_CASE("Activity test/wait: using >") +{ + XBT_INFO("#####[ launch next test ]#####"); + + RUN_SECTION("exec: run and wait_any<1> once", test_trivial>); + RUN_SECTION("exec: run and wait_any<1> many", test_basic>); + RUN_SECTION("exec: cancel and wait_any<1>", test_cancel>); + RUN_SECTION("exec: actor failure and wait_any<1> / sleep", + test_failure_actor, waiter_sleep6>); + RUN_SECTION("exec: host failure and wait_any<1> / sleep", + test_failure_host, waiter_sleep6>); + RUN_SECTION("exec: actor failure and wait_any<1> / wait", + test_failure_actor, waiter_wait>); + RUN_SECTION("exec: host failure and wait_any<1> / wait", + test_failure_host, waiter_wait>); + + simgrid::s4u::this_actor::sleep_for(10); + assert_cleanup(); +}