X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a497c1d62e1064de5a4d765dc43cb9e71243ba95..cadc6f2a1e9eea38f5b9cd5f148e1bc282c26981:/src/mc/LivenessChecker.hpp diff --git a/src/mc/LivenessChecker.hpp b/src/mc/LivenessChecker.hpp index 918c855ded..f9def2168d 100644 --- a/src/mc/LivenessChecker.hpp +++ b/src/mc/LivenessChecker.hpp @@ -7,12 +7,15 @@ #ifndef SIMGRID_MC_LIVENESS_CHECKER_HPP #define SIMGRID_MC_LIVENESS_CHECKER_HPP -#include +#include + +#include +#include +#include +#include #include #include -#include -#include #include #include #include "src/mc/mc_state.h" @@ -25,20 +28,17 @@ SG_END_DECL() namespace simgrid { namespace mc { -extern XBT_PRIVATE xbt_automaton_t property_automaton; - struct XBT_PRIVATE Pair { int num = 0; - int search_cycle = 0; - mc_state_t graph_state = nullptr; /* System state included */ + bool search_cycle = false; + std::shared_ptr graph_state = nullptr; /* System state included */ xbt_automaton_state_t automaton_state = nullptr; - simgrid::xbt::unique_ptr atomic_propositions; + std::shared_ptr> atomic_propositions; int requests = 0; int depth = 0; - int exploration_started = 0; - int visited_pair_removed = 0; + bool exploration_started = false; - Pair(); + Pair(unsigned long expanded_pairs); ~Pair(); Pair(Pair const&) = delete; @@ -48,36 +48,48 @@ struct XBT_PRIVATE Pair { struct XBT_PRIVATE VisitedPair { int num = 0; int other_num = 0; /* Dot output for */ - int acceptance_pair = 0; - mc_state_t graph_state = nullptr; /* System state included */ + std::shared_ptr graph_state = nullptr; /* System state included */ xbt_automaton_state_t automaton_state = nullptr; - simgrid::xbt::unique_ptr atomic_propositions; - size_t heap_bytes_used = 0; + std::shared_ptr> atomic_propositions; + std::size_t heap_bytes_used = 0; int nb_processes = 0; - int acceptance_removed = 0; - int visited_removed = 0; - VisitedPair(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions, mc_state_t graph_state); + VisitedPair( + int pair_num, xbt_automaton_state_t automaton_state, + std::shared_ptr> atomic_propositions, + std::shared_ptr graph_state); ~VisitedPair(); }; -class LivenessChecker : public Checker { +class XBT_PRIVATE LivenessChecker : public Checker { public: LivenessChecker(Session& session); ~LivenessChecker(); 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); - void dumpStack(xbt_fifo_t stack); - void showStack(xbt_fifo_t stack); - simgrid::xbt::unique_ptr getPropositionValues(); - simgrid::mc::VisitedPair* insertAcceptancePair(simgrid::mc::Pair* pair); - int insertVisitedPair(simgrid::mc::VisitedPair* visited_pair, simgrid::mc::Pair* pair); + 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(xbt_fifo_t stack); + void replay(); void removeAcceptancePair(int pair_num); + void purgeVisitedPairs(); + void backtrack(); + std::shared_ptr newPair(Pair* pair, xbt_automaton_state_t state, std::shared_ptr> propositions); +public: + // A stack of (application_state, automaton_state) pairs for DFS exploration: + std::list> explorationStack_; + std::list> acceptancePairs_; + std::list> visitedPairs_; +private: + unsigned long visitedPairsCount_ = 0; + unsigned long expandedPairsCount_ = 0; }; }