#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 <unordered_map>
// e3
// / /
// e4 e5
- UnfoldingEvent e1;
- UnfoldingEvent e2{&e1};
- UnfoldingEvent e3{&e2};
- UnfoldingEvent e4{&e3};
- UnfoldingEvent e5{&e3};
+ UnfoldingEvent e1(EventSet(), std::make_shared<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e3}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e5(EventSet({&e3}), std::make_shared<IndependentAction>());
SECTION("Creating a configuration without events")
{
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}));
// /
// / /
// e3 e4
- UnfoldingEvent e1;
- UnfoldingEvent e2{&e1};
- UnfoldingEvent e3{&e2};
- UnfoldingEvent e4{&e2};
+ UnfoldingEvent e1(EventSet(), std::make_shared<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e2}), std::make_shared<IndependentAction>());
REQUIRE_THROWS_AS(Configuration().add_event(nullptr), std::invalid_argument);
REQUIRE_THROWS_AS(Configuration().add_event(&e2), std::invalid_argument);
// e3
// /
// e4
- UnfoldingEvent e1;
- UnfoldingEvent e2{&e1};
- UnfoldingEvent e3{&e2};
- UnfoldingEvent e4{&e3};
+ UnfoldingEvent e1(EventSet(), std::make_shared<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e3}), std::make_shared<IndependentAction>());
SECTION("Topological ordering for entire set")
{
// 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<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e3}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e5(EventSet({&e4}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e6(EventSet({&e3}), std::make_shared<IndependentAction>());
SECTION("Topological ordering for subsets")
{
// / / /
// / / /
// [ 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<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e8(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e3}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e5(EventSet({&e4}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e6(EventSet({&e4}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e7(EventSet({&e2, &e8}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e9(EventSet({&e6, &e7}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e10(EventSet({&e7}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e11(EventSet({&e8}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e12(EventSet({&e5, &e9, &e10}), std::make_shared<IndependentAction>());
Configuration C{&e1, &e2, &e3, &e4, &e5, &e6, &e7, &e8, &e9, &e10, &e11, &e12};
SECTION("Test every combination of the maximal configuration (forward graph)")
// 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<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e3}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e5(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e6(EventSet({&e5}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e7(EventSet({&e6}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e8(EventSet({&e6}), std::make_shared<IndependentAction>());
SECTION("Iteration over an empty configuration yields only the empty set")
{
// | 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<IndependentAction>());
+ UnfoldingEvent e2(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e3(EventSet({&e1}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e4(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e5(EventSet({&e2}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e6(EventSet({&e3}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e7(EventSet({&e3}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e8(EventSet({&e4}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e9(EventSet({&e4, &e5, &e6}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e10(EventSet({&e6, &e7}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e11(EventSet({&e8}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e12(EventSet({&e8}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e13(EventSet({&e9}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e14(EventSet({&e9}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e15(EventSet({&e10}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e16(EventSet({&e5, &e11}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e17(EventSet({&e12, &e13, &e14}), std::make_shared<IndependentAction>());
+ UnfoldingEvent e18(EventSet({&e14, &e15}), std::make_shared<IndependentAction>());
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")