X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fa640887e373f7bf7dcba89d3e07a44dd9028b7b..2f2db04b850386899392bc06568f17f071f8620f:/src/mc/explo/udpor/Configuration_test.cpp diff --git a/src/mc/explo/udpor/Configuration_test.cpp b/src/mc/explo/udpor/Configuration_test.cpp index aadcbd1241..48eeb4e1fd 100644 --- a/src/mc/explo/udpor/Configuration_test.cpp +++ b/src/mc/explo/udpor/Configuration_test.cpp @@ -9,6 +9,7 @@ #include "src/mc/explo/udpor/History.hpp" #include "src/mc/explo/udpor/UnfoldingEvent.hpp" #include "src/mc/explo/udpor/maximal_subsets_iterator.hpp" +#include "src/mc/explo/udpor/udpor_tests_private.hpp" #include @@ -24,11 +25,11 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Constructing Configurations") // e3 // / / // e4 e5 - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e3{&e2}; - UnfoldingEvent e4{&e3}; - UnfoldingEvent e5{&e3}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e3}), std::make_shared()); + UnfoldingEvent e5(EventSet({&e3}), std::make_shared()); SECTION("Creating a configuration without events") { @@ -37,7 +38,7 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Constructing Configurations") REQUIRE(C.get_latest_event() == nullptr); } - SECTION("Creating a configuration with events") + SECTION("Creating a configuration with events (test violation of being causally closed)") { // 5 choose 0 = 1 test REQUIRE_NOTHROW(Configuration({&e1})); @@ -93,10 +94,10 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Adding Events") // / // / / // e3 e4 - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e3{&e2}; - UnfoldingEvent e4{&e2}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e2}), std::make_shared()); REQUIRE_THROWS_AS(Configuration().add_event(nullptr), std::invalid_argument); REQUIRE_THROWS_AS(Configuration().add_event(&e2), std::invalid_argument); @@ -136,10 +137,10 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Topological Sort Order") // e3 // / // e4 - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e3{&e2}; - UnfoldingEvent e4{&e3}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e3}), std::make_shared()); SECTION("Topological ordering for entire set") { @@ -194,12 +195,12 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Topological Sort Order More Compli // e4 e6 // / // e5 - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e3{&e2}; - UnfoldingEvent e4{&e3}; - UnfoldingEvent e5{&e4}; - UnfoldingEvent e6{&e3}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e3}), std::make_shared()); + UnfoldingEvent e5(EventSet({&e4}), std::make_shared()); + UnfoldingEvent e6(EventSet({&e3}), std::make_shared()); SECTION("Topological ordering for subsets") { @@ -303,18 +304,18 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Topological Sort Order Very Compli // / / / // / / / // [ e12 ] - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e8{&e1}; - UnfoldingEvent e3{&e2}; - UnfoldingEvent e4{&e3}; - UnfoldingEvent e5{&e4}; - UnfoldingEvent e6{&e4}; - UnfoldingEvent e7{&e2, &e8}; - UnfoldingEvent e9{&e6, &e7}; - UnfoldingEvent e10{&e7}; - UnfoldingEvent e11{&e8}; - UnfoldingEvent e12{&e5, &e9, &e10}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e8(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e3}), std::make_shared()); + UnfoldingEvent e5(EventSet({&e4}), std::make_shared()); + UnfoldingEvent e6(EventSet({&e4}), std::make_shared()); + UnfoldingEvent e7(EventSet({&e2, &e8}), std::make_shared()); + UnfoldingEvent e9(EventSet({&e6, &e7}), std::make_shared()); + UnfoldingEvent e10(EventSet({&e7}), std::make_shared()); + UnfoldingEvent e11(EventSet({&e8}), std::make_shared()); + UnfoldingEvent e12(EventSet({&e5, &e9, &e10}), std::make_shared()); Configuration C{&e1, &e2, &e3, &e4, &e5, &e6, &e7, &e8, &e9, &e10, &e11, &e12}; SECTION("Test every combination of the maximal configuration (forward graph)") @@ -386,6 +387,13 @@ TEST_CASE("simgrid::mc::udpor::Configuration: Topological Sort Order Very Compli REQUIRE(events_seen == ordered_event_set); } } + + SECTION("Test that the topological ordering is equivalent to that of the configuration's events") + { + REQUIRE(C.get_topologically_sorted_events() == C.get_events().get_topological_ordering()); + REQUIRE(C.get_topologically_sorted_events_of_reverse_graph() == + C.get_events().get_topological_ordering_of_reverse_graph()); + } } TEST_CASE("simgrid::mc::udpor::maximal_subsets_iterator: Basic Testing of Maximal Subsets") @@ -398,14 +406,14 @@ TEST_CASE("simgrid::mc::udpor::maximal_subsets_iterator: Basic Testing of Maxima // e3 e6 // / / / // e4 e7 e8 - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e3{&e2}; - UnfoldingEvent e4{&e3}; - UnfoldingEvent e5{&e1}; - UnfoldingEvent e6{&e5}; - UnfoldingEvent e7{&e6}; - UnfoldingEvent e8{&e6}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e3}), std::make_shared()); + UnfoldingEvent e5(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e6(EventSet({&e5}), std::make_shared()); + UnfoldingEvent e7(EventSet({&e6}), std::make_shared()); + UnfoldingEvent e8(EventSet({&e6}), std::make_shared()); SECTION("Iteration over an empty configuration yields only the empty set") { @@ -531,24 +539,24 @@ TEST_CASE("simgrid::mc::udpor::maximal_subsets_iterator: Stress Test for Maximal // | e11 e12 e13 e14 e15 // | / / / / / / // +-> e16 e17 e18 - UnfoldingEvent e1; - UnfoldingEvent e2{&e1}; - UnfoldingEvent e3{&e1}; - UnfoldingEvent e4{&e2}; - UnfoldingEvent e5{&e2}; - UnfoldingEvent e6{&e3}; - UnfoldingEvent e7{&e3}; - UnfoldingEvent e8{&e4}; - UnfoldingEvent e9{&e4, &e5, &e6}; - UnfoldingEvent e10{&e6, &e7}; - UnfoldingEvent e11{&e8}; - UnfoldingEvent e12{&e8}; - UnfoldingEvent e13{&e9}; - UnfoldingEvent e14{&e9}; - UnfoldingEvent e15{&e10}; - UnfoldingEvent e16{&e5, &e11}; - UnfoldingEvent e17{&e12, &e13, &e14}; - UnfoldingEvent e18{&e14, &e15}; + UnfoldingEvent e1(EventSet(), std::make_shared()); + UnfoldingEvent e2(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e3(EventSet({&e1}), std::make_shared()); + UnfoldingEvent e4(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e5(EventSet({&e2}), std::make_shared()); + UnfoldingEvent e6(EventSet({&e3}), std::make_shared()); + UnfoldingEvent e7(EventSet({&e3}), std::make_shared()); + UnfoldingEvent e8(EventSet({&e4}), std::make_shared()); + UnfoldingEvent e9(EventSet({&e4, &e5, &e6}), std::make_shared()); + UnfoldingEvent e10(EventSet({&e6, &e7}), std::make_shared()); + UnfoldingEvent e11(EventSet({&e8}), std::make_shared()); + UnfoldingEvent e12(EventSet({&e8}), std::make_shared()); + UnfoldingEvent e13(EventSet({&e9}), std::make_shared()); + UnfoldingEvent e14(EventSet({&e9}), std::make_shared()); + UnfoldingEvent e15(EventSet({&e10}), std::make_shared()); + UnfoldingEvent e16(EventSet({&e5, &e11}), std::make_shared()); + UnfoldingEvent e17(EventSet({&e12, &e13, &e14}), std::make_shared()); + UnfoldingEvent e18(EventSet({&e14, &e15}), std::make_shared()); Configuration C{&e1, &e2, &e3, &e4, &e5, &e6, &e7, &e8, &e9, &e10, &e11, &e12, &e13, &e14, &e15, &e16, &e17, &e18}; SECTION("Every subset iterated over is maximal") @@ -564,4 +572,30 @@ TEST_CASE("simgrid::mc::udpor::maximal_subsets_iterator: Stress Test for Maximal REQUIRE((*first).is_maximal()); } } + + SECTION("Test that the maximal set ordering is equivalent to that of the configuration's events") + { + maximal_subsets_iterator first_config(C); + maximal_subsets_iterator first_events(C.get_events()); + maximal_subsets_iterator last; + + // Make sure we actually have something to iterate over + REQUIRE(first_config != last); + REQUIRE(first_config == first_events); + REQUIRE(first_events != last); + + for (; first_config != last; ++first_config, ++first_events) { + // first_events and first_config should always be at the same location + REQUIRE(first_events != last); + const auto& first_config_set = *first_config; + const auto& first_events_set = *first_events; + + REQUIRE(first_config_set.size() <= C.get_events().size()); + REQUIRE(first_config_set.is_maximal()); + REQUIRE(first_events_set == first_config_set); + } + + // Iteration with events directly should now also be finished + REQUIRE(first_events == last); + } } \ No newline at end of file