/** @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 */
+ 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 */
};
/** @brief The central structure for model-checking */
public:
ModelChecker();
~ModelChecker();
- void setParams(struct model_params params);
+ model_params * getParams();
void run();
/** Restart the model checker, intended for pluggins. */
ucontext_t * get_system_context() { return &system_context; }
ModelExecution * get_execution() const { return execution; }
+ ModelHistory * get_history() const { return history; }
int get_execution_number() const { return execution_number; }
uint64_t switch_to_master(ModelAction *act);
bool assert_bug(const char *msg, ...);
+ bool assert_race(const char *msg, ...);
+
void assert_user_bug(const char *msg);
model_params params;
void add_trace_analysis(TraceAnalysis *a) { trace_analyses.push_back(a); }
void set_inspect_plugin(TraceAnalysis *a) { inspect_plugin=a; }
+ void startMainThread();
+ void startChecker();
MEMALLOC
private:
/** Flag indicates whether to restart the model checker. */
/** The scheduler to use: tracks the running/ready Threads */
Scheduler * const scheduler;
- NodeStack * const node_stack;
ModelExecution *execution;
+ Thread * init_thread;
+ ModelHistory *history;
int execution_number;
};
extern ModelChecker *model;
-
-#endif/* __MODEL_H__ */
+#endif /* __MODEL_H__ */