X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d46084304d833b121ab0e10ef90ba7fd27906621..f456852dd160e1f60f58e2a3ef37a0e688993fe0:/src/mc/explo/udpor/EventSet_test.cpp diff --git a/src/mc/explo/udpor/EventSet_test.cpp b/src/mc/explo/udpor/EventSet_test.cpp index 72f56141ed..14fb1627fb 100644 --- a/src/mc/explo/udpor/EventSet_test.cpp +++ b/src/mc/explo/udpor/EventSet_test.cpp @@ -51,7 +51,6 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Initial conditions when creating sets") SECTION("List initialization") { - UnfoldingEvent e1, e2, e3; EventSet event_set{&e1, &e2, &e3}; REQUIRE(event_set.size() == 3); REQUIRE(event_set.contains(&e1)); @@ -117,7 +116,7 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Deletions") { REQUIRE(event_set.contains(&e1)); - // event_set = {e2, e3} + // Recall that event_set = {e2, e3} event_set.remove(&e1); // Check that @@ -132,7 +131,7 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Deletions") SECTION("Remove a single element more than once") { - // event_set = {e2, e3} + // Recall that event_set = {e2, e3} event_set.remove(&e1); REQUIRE(event_set.size() == 2); REQUIRE_FALSE(event_set.contains(&e1)); @@ -143,7 +142,7 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Deletions") SECTION("Remove more than one element") { - // event_set = {e3} + // Recall that event_set = {e3} event_set.remove(&e2); REQUIRE(event_set.size() == 1); @@ -152,7 +151,7 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Deletions") REQUIRE(event_set.contains(&e3)); REQUIRE_FALSE(event_set.empty()); - // event_set = {} + // Recall that event_set = {} event_set.remove(&e3); REQUIRE(event_set.size() == 0); @@ -167,7 +166,7 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Deletions") { REQUIRE_FALSE(event_set.contains(&e4)); - // event_set = {e1, e2, e3} + // Recall that event_set = {e1, e2, e3} event_set.remove(&e4); REQUIRE(event_set.size() == 3); REQUIRE(event_set.contains(&e1)); @@ -502,4 +501,214 @@ TEST_CASE("simgrid::mc::udpor::EventSet: Subset Tests") REQUIRE(F.is_subset_of(F)); } } +} + +TEST_CASE("simgrid::mc::udpor::EventSet: Testing Configurations") +{ + // The following tests concern the given event structure: + // e1 + // / / + // e2 e5 + // / / / + // e3 e4 e6 + // The tests enumerate all possible subsets of the events + // in the structure and test whether those subsets are + // maximal and/or valid configurations + UnfoldingEvent e1; + UnfoldingEvent e2{&e1}, e5{&e1}; + UnfoldingEvent e3{&e2}, e4{&e2}; + UnfoldingEvent e6{&e5}; + + SECTION("Valid Configurations") + { + SECTION("The empty set is valid") + { + REQUIRE(EventSet().is_valid_configuration()); + } + + SECTION("The set with only the root event is valid") + { + REQUIRE(EventSet({&e1}).is_valid_configuration()); + } + + SECTION("All sets of maximal events are valid configurations") + { + REQUIRE(EventSet({&e1}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e4}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e5}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e5, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e5}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e5, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3, &e4}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3, &e5}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e4, &e5}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e4, &e5, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3, &e4, &e5}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3, &e4, &e5, &e6}).is_valid_configuration()); + } + } + + SECTION("Configuration checks") + { + // 6 choose 0 = 1 test + REQUIRE(EventSet().is_valid_configuration()); + + // 6 choose 1 = 6 tests + REQUIRE(EventSet({&e1}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e4}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e6}).is_valid_configuration()); + + // 6 choose 2 = 15 tests + REQUIRE(EventSet({&e1, &e2}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e4}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e4}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e4}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e4, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e5, &e6}).is_valid_configuration()); + + // 6 choose 3 = 20 tests + REQUIRE(EventSet({&e1, &e2, &e3}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e4}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e4, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e4, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e4, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e4, &e5, &e6}).is_valid_configuration()); + + // 6 choose 4 = 15 tests + REQUIRE(EventSet({&e1, &e2, &e3, &e4}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e4, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e4, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e4, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e3, &e4, &e5, &e6}).is_valid_configuration()); + + // 6 choose 5 = 6 tests + REQUIRE(EventSet({&e1, &e2, &e3, &e4, &e5}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e4, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e3, &e5, &e6}).is_valid_configuration()); + REQUIRE(EventSet({&e1, &e2, &e4, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4, &e5, &e6}).is_valid_configuration()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4, &e5, &e6}).is_valid_configuration()); + + // 6 choose 6 = 1 test + REQUIRE(EventSet({&e1, &e2, &e3, &e4, &e5, &e6}).is_valid_configuration()); + } + + SECTION("Maximal event sets") + { + // 6 choose 0 = 1 test + REQUIRE(EventSet().is_maximal_event_set()); + + // 6 choose 1 = 6 tests + REQUIRE(EventSet({&e1}).is_maximal_event_set()); + REQUIRE(EventSet({&e2}).is_maximal_event_set()); + REQUIRE(EventSet({&e3}).is_maximal_event_set()); + REQUIRE(EventSet({&e4}).is_maximal_event_set()); + REQUIRE(EventSet({&e5}).is_maximal_event_set()); + REQUIRE(EventSet({&e6}).is_maximal_event_set()); + + // 6 choose 2 = 15 tests + REQUIRE_FALSE(EventSet({&e1, &e2}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e4}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e4}).is_maximal_event_set()); + REQUIRE(EventSet({&e2, &e5}).is_maximal_event_set()); + REQUIRE(EventSet({&e2, &e6}).is_maximal_event_set()); + REQUIRE(EventSet({&e3, &e4}).is_maximal_event_set()); + REQUIRE(EventSet({&e3, &e5}).is_maximal_event_set()); + REQUIRE(EventSet({&e3, &e6}).is_maximal_event_set()); + REQUIRE(EventSet({&e4, &e5}).is_maximal_event_set()); + REQUIRE(EventSet({&e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e5, &e6}).is_maximal_event_set()); + + // 6 choose 3 = 20 tests + REQUIRE_FALSE(EventSet({&e1, &e2, &e3}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e4}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e4, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e4, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e5, &e6}).is_maximal_event_set()); + REQUIRE(EventSet({&e3, &e4, &e5}).is_maximal_event_set()); + REQUIRE(EventSet({&e3, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e3, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e4, &e5, &e6}).is_maximal_event_set()); + + // 6 choose 4 = 15 tests + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e4}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e4, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e4, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e4, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e3, &e4, &e5, &e6}).is_maximal_event_set()); + + // 6 choose 5 = 6 tests + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e4, &e5}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e4, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e2, &e4, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e1, &e3, &e4, &e5, &e6}).is_maximal_event_set()); + REQUIRE_FALSE(EventSet({&e2, &e3, &e4, &e5, &e6}).is_maximal_event_set()); + + // 6 choose 6 = 1 test + REQUIRE_FALSE(EventSet({&e1, &e2, &e3, &e4, &e5, &e6}).is_maximal_event_set()); + } } \ No newline at end of file