Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #ifndef _Regression_h
00025 #define _Regression_h
00026 
00027 #include "libts.h"
00028 #include "Regex.h"
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 #define REGRESSION_TEST_PASSED         1
00049 #define REGRESSION_TEST_INPROGRESS     0 // initial value
00050 #define REGRESSION_TEST_FAILED         -1
00051 #define REGRESSION_TEST_NOT_RUN        -2
00052 
00053 
00054 #define REGRESSION_TEST_NONE           0
00055 #define REGRESSION_TEST_QUICK          1
00056 #define REGRESSION_TEST_NIGHTLY        2
00057 #define REGRESSION_TEST_EXTENDED       3
00058  
00059 #define REGRESSION_TEST_FATAL          4
00060 
00061 
00062 #define REGRESSION_OPT_EXCLUSIVE       (1 << 0)
00063 
00064 struct RegressionTest;
00065 
00066 typedef void TestFunction(RegressionTest * t, int type, int *status);
00067 
00068 struct RegressionTest
00069 {
00070   const char *name;
00071   TestFunction *function;
00072   RegressionTest *next;
00073   int status;
00074   int printed;
00075   int opt;
00076 
00077   RegressionTest(const char *name_arg, TestFunction * function_arg, int aopt);
00078 
00079   static int final_status;
00080   static int ran_tests;
00081   static DFA dfa;
00082   static RegressionTest *current;
00083   static int run(char *name = NULL);
00084   static int run_some();
00085   static int check_status();
00086 };
00087 
00088 #define REGRESSION_TEST(_f) \
00089 void RegressionTest_##_f(RegressionTest * t, int atype, int *pstatus); \
00090 RegressionTest regressionTest_##_f(#_f,&RegressionTest_##_f, 0);\
00091 void RegressionTest_##_f
00092 
00093 #define EXCLUSIVE_REGRESSION_TEST(_f) \
00094 void RegressionTest_##_f(RegressionTest * t, int atype, int *pstatus); \
00095 RegressionTest regressionTest_##_f(#_f,&RegressionTest_##_f, REGRESSION_OPT_EXCLUSIVE);\
00096 void RegressionTest_##_f
00097 
00098 int rprintf(RegressionTest * t, const char *format, ...);
00099 int rperf(RegressionTest *t, const char *tag, double val);
00100 char *regression_status_string(int status);
00101 
00102 extern int regression_level;
00103 
00104 #define SignalError(_buf, _already)                                     \
00105 {                                                                       \
00106   if(_already == false) pmgmt->signalManager(MGMT_SIGNAL_CONFIG_ERROR, _buf); \
00107   _already = true;                                                      \
00108   Warning("%s", _buf);                                                  \
00109 }                                                                       \
00110 
00111 #endif