X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2b32f4ae7739666694f8f27ff5122c829daa94dc..07483e97b12350d1d293f19689575f0fbdcf0246:/src/mc/LivenessChecker.hpp diff --git a/src/mc/LivenessChecker.hpp b/src/mc/LivenessChecker.hpp index 6988690f79..751dacc70f 100644 --- a/src/mc/LivenessChecker.hpp +++ b/src/mc/LivenessChecker.hpp @@ -16,7 +16,6 @@ #include #include -#include #include #include #include "src/mc/mc_state.h" @@ -29,19 +28,17 @@ SG_END_DECL() namespace simgrid { namespace mc { -extern XBT_PRIVATE xbt_automaton_t property_automaton; - struct XBT_PRIVATE Pair { int num = 0; bool search_cycle = false; std::shared_ptr graph_state = nullptr; /* System state included */ xbt_automaton_state_t automaton_state = nullptr; - std::vector atomic_propositions; + std::shared_ptr> atomic_propositions; int requests = 0; int depth = 0; bool exploration_started = false; - Pair(); + Pair(unsigned long expanded_pairs); ~Pair(); Pair(Pair const&) = delete; @@ -53,13 +50,13 @@ struct XBT_PRIVATE VisitedPair { int other_num = 0; /* Dot output for */ std::shared_ptr graph_state = nullptr; /* System state included */ xbt_automaton_state_t automaton_state = nullptr; - std::vector atomic_propositions; + std::shared_ptr> atomic_propositions; std::size_t heap_bytes_used = 0; - int nb_processes = 0; + int actors_count = 0; VisitedPair( int pair_num, xbt_automaton_state_t automaton_state, - std::vector const& atomic_propositions, + std::shared_ptr> atomic_propositions, std::shared_ptr graph_state); ~VisitedPair(); }; @@ -71,20 +68,30 @@ public: int run() override; RecordTrace getRecordTrace() override; std::vector getTextualTrace() override; + void logState() override; private: int main(); void prepare(); int compare(simgrid::mc::VisitedPair* state1, simgrid::mc::VisitedPair* state2); - std::vector getPropositionValues(); + std::shared_ptr> getPropositionValues(); std::shared_ptr insertAcceptancePair(simgrid::mc::Pair* pair); int insertVisitedPair(std::shared_ptr visited_pair, simgrid::mc::Pair* pair); void showAcceptanceCycle(std::size_t depth); void replay(); void removeAcceptancePair(int pair_num); -public: + void purgeVisitedPairs(); + void backtrack(); + std::shared_ptr newPair(Pair* pair, xbt_automaton_state_t state, std::shared_ptr> propositions); +private: + // A stack of (application_state, automaton_state) pairs for DFS exploration: + std::list> explorationStack_; std::list> acceptancePairs_; - std::list livenessStack_; std::list> visitedPairs_; + unsigned long visitedPairsCount_ = 0; + unsigned long expandedPairsCount_ = 0; + unsigned long expandedStatesCount_ = 0; + int previousPair_ = 0; + std::string previousRequest_; }; }