X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=model.h;h=15516e267cfbb9b7c8947ed8d550926e59de8a98;hp=e64597f8d4d9a745a9a9f09f6eda9fe198a4b945;hb=f71df291f0158236d46fc39e9c5ca02e3329f628;hpb=dfb6b1724a592f7a5376336d653b93d9010833c4 diff --git a/model.h b/model.h index e64597f8..15516e26 100644 --- a/model.h +++ b/model.h @@ -47,6 +47,18 @@ struct model_params { * expiration time exceeds the existing one by more than the slop * value */ unsigned int expireslop; + + /** @brief Verbosity (0 = quiet; 1 = noisy) */ + int verbose; +}; + +/** @brief Model checker execution stats */ +struct execution_stats { + int num_total; /**< @brief Total number of executions */ + int num_infeasible; /**< @brief Number of infeasible executions */ + int num_buggy_executions; /** @brief Number of buggy executions */ + int num_complete; /**< @brief Number of feasible, non-buggy, complete executions */ + int num_redundant; /**< @brief Number of redundant, aborted executions */ }; struct PendingFutureValue { @@ -76,8 +88,7 @@ public: /** @returns the context for the main model-checking system thread */ ucontext_t * get_system_context() { return &system_context; } - /** Prints an execution summary with trace information. */ - void print_summary(); + void print_summary() const; #if SUPPORT_MOD_ORDER_DUMP void dumpGraph(char *filename); #endif @@ -108,13 +119,13 @@ public: void finish_execution(); bool isfeasibleprefix() const; - void assert_bug(const char *msg, bool user_thread = false, bool immediate = false); - void assert_bug(bool user_thread = true); - void assert_bug_immediate(const char *msg); + bool assert_bug(const char *msg); + void assert_user_bug(const char *msg); void set_assert() {asserted=true;} bool is_deadlocked() const; bool is_complete_execution() const; + void print_stats() const; /** @brief Alert the model-checker that an incorrectly-ordered * synchronization was made */ @@ -133,8 +144,6 @@ private: bool mo_may_allow(const ModelAction * writer, const ModelAction *reader); bool has_asserted() {return asserted;} void reset_asserted() {asserted=false;} - int num_executions; - int num_feasible_executions; bool promises_expired() const; void execute_sleep_set(); void wake_up_sleeping_actions(ModelAction * curr); @@ -238,8 +247,13 @@ private: /** @brief Incorrectly-ordered synchronization was made */ bool bad_synchronization; + /** @brief The cumulative execution stats */ + struct execution_stats stats; + void record_stats(); + bool have_bug_reports() const; void print_bugs() const; + void print_execution(bool printbugs) const; }; extern ModelChecker *model;