135 #include <sys/time.h>
136 #include <sys/resource.h>
137 #include <sys/types.h>
143 extern int getrusage();
147 inline double cputime(
void ) {
148 getrusage( RUSAGE_SELF, &ruse );
149 return ( ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec + 1e-6 * (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec ) );
157 inline double transactions_per_second(
double run_time,
unsigned long transactions ) {
158 return (
double)transactions / run_time;
166 inline void print_cputime(
double run_time,
unsigned long transactions = 0 ) {
168 if( transactions == 0 ){
169 printf(
"%7.3f seconds CPU time\n", run_time );
171 printf(
"(%li x): %7.3f seconds CPU time\n", transactions, run_time );
172 printf(
" (%7.3f transactions/second)\n",
173 transactions_per_second( run_time, transactions ) );
178 typedef bool(*test_func)(void);
180 typedef std::vector< test_func > test_vector;
186 #define UNIT_TEST_DEFINES \
187 test_vector * add_test( test_func x ) { \
188 static test_vector unit_tests; \
189 if( x != NULL ) unit_tests.push_back( x ); \
190 return &unit_tests; \
196 #define DEFINE_TEST(test_name) bool unit_test_##test_name (void)
203 #define ADD_TEST(test_name) add_test( &unit_test_##test_name );
211 #define UNIT_MEASURE_START(msg,times) \
212 { std::cout << " -> " << msg << std::flush; \
213 double measure_t1 = cputime(); \
214 int measure_times = times; \
215 for(int measure_i=0; measure_i < times; measure_i++){
220 #define UNIT_MEASURE_STOP(msg) \
222 print_cputime(cputime()-measure_t1,measure_times); \
231 #define UNIT_TEST_RUN( suite ) \
233 bool result = true; \
234 std::cout << "---[ " << suite << " ]--- " << std::endl;
239 #define unit_assert( msg, cond ) \
241 char buffer[40]; memset(buffer,32,40); \
242 int pos = strlen(msg); \
243 buffer[40- (pos>40 ? 40 : pos)]=0; \
244 std::cout << " " << msg << ": " << buffer << std::flush; \
245 if( !(cond) ) { std::cout << "FAILED!" << std::endl; return false; } \
246 std::cout << "PASSED" << std::endl; \
252 #define unit_pass() return true;
257 #define unit_fail() return false;
261 #define UNIT_TEST_END \
262 test_vector *_vector = add_test( NULL ); \
263 for( unsigned short i = 0; i < _vector->size(); i++ ) { \
264 bool testresult = (*(*_vector)[i])(); \
265 if( result == true && testresult == false ) { result = false; } \
272 #endif // _UNIT_TEST_H