X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f783ed4680c6862a1b7543237e89d1221334bae0..1d31b17008f739a67f54a3fcd4095fe8057831ed:/src/mc/mc_global.c diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 1142da7c2a..6a4600130c 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -15,9 +15,12 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_global, mc, mc_snapshot_t initial_snapshot = NULL; xbt_fifo_t mc_stack = NULL; mc_stats_t mc_stats = NULL; +mc_stats_pair_t mc_stats_pair = NULL; mc_state_t mc_current_state = NULL; char mc_replay_mode = FALSE; double *mc_time = NULL; +xbt_fifo_t mc_snapshot_stack = NULL; + /** * \brief Initialize the model-checker data structures */ @@ -51,6 +54,33 @@ void MC_init(void) MC_UNSET_RAW_MEM; } +void MC_init_with_automaton(xbt_automaton_t a){ + + XBT_DEBUG("Start init mc"); + + mc_time = xbt_new0(double, simix_process_maxpid); + + /* Initialize the data structures that must be persistent across every + iteration of the model-checker (in RAW memory) */ + + MC_SET_RAW_MEM; + + /* Initialize statistics */ + mc_stats_pair = xbt_new0(s_mc_stats_pair_t, 1); + //mc_stats_pair->pair_size = 1; + + XBT_DEBUG("Creating snapshot_stack"); + + /* Create exploration stack */ + mc_snapshot_stack = xbt_fifo_new(); + + MC_UNSET_RAW_MEM; + + //MC_dfs_init(a); + MC_stateful_dpor_init(a); +} + + void MC_modelcheck(void) { MC_init(); @@ -58,6 +88,18 @@ void MC_modelcheck(void) MC_exit(); } +void MC_modelcheck_with_automaton(xbt_automaton_t a){ + MC_init_with_automaton(a); + MC_exit_with_automaton(); +} + +void MC_exit_with_automaton(void) +{ + MC_print_statistics_pairs(mc_stats_pair); + xbt_free(mc_time); + MC_memory_exit(); +} + void MC_exit(void) { MC_print_statistics(mc_stats); @@ -222,6 +264,17 @@ void MC_print_statistics(mc_stats_t stats) (double)stats->expanded_states / stats->state_size); */ } +void MC_print_statistics_pairs(mc_stats_pair_t stats) +{ + XBT_INFO("Expanded pairs = %lu", stats->expanded_pairs); + XBT_INFO("Visited pairs = %lu", stats->visited_pairs); + XBT_INFO("Executed transitions = %lu", stats->executed_transitions); + XBT_INFO("Expanded / Visited = %lf", + (double) stats->visited_pairs / stats->expanded_pairs); + /*XBT_INFO("Exploration coverage = %lf", + (double)stats->expanded_states / stats->state_size); */ +} + void MC_assert(int prop) { if (MC_IS_ENABLED && !prop) { @@ -235,6 +288,19 @@ void MC_assert(int prop) } } +void MC_assert_pair(int prop){ + if (MC_IS_ENABLED && !prop) { + XBT_INFO("**************************"); + XBT_INFO("*** PROPERTY NOT VALID ***"); + XBT_INFO("**************************"); + //XBT_INFO("Counter-example execution trace:"); + MC_show_snapshot_stack(mc_snapshot_stack); + //MC_dump_snapshot_stack(mc_snapshot_stack); + MC_print_statistics_pairs(mc_stats_pair); + xbt_abort(); + } +} + void MC_process_clock_add(smx_process_t process, double amount) { mc_time[process->pid] += amount;