1610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov/* 2610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov This file is part of Valgrind, a dynamic binary instrumentation 3610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov framework. 4610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 5610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov Copyright (C) 2008-2008 Google Inc 6610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov opensource@google.com 7610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 8610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov This program is free software; you can redistribute it and/or 9610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov modify it under the terms of the GNU General Public License as 10610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov published by the Free Software Foundation; either version 2 of the 11610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov License, or (at your option) any later version. 12610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 13610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov This program is distributed in the hope that it will be useful, but 14610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov WITHOUT ANY WARRANTY; without even the implied warranty of 15610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov General Public License for more details. 17610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 18610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov You should have received a copy of the GNU General Public License 19610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov along with this program; if not, write to the Free Software 20610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 21610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 02111-1307, USA. 22610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 23610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov The GNU General Public License is contained in the file COPYING. 24610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov*/ 25610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 26610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov/* Author: Konstantin Serebryany <opensource@google.com> 27610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 28610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov This file contains a simple test suite for some of our old unit-tests. 29610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov These tests are likely to be moved to googletest framework over time. 30610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov*/ 31610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#ifndef OLD_TEST_SUITE_H__ 32610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#define OLD_TEST_SUITE_H__ 33610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 34610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#include <map> 35610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#include <set> 36610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#include <cstring> 37610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 38610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#include "test_utils.h" 39610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 40610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovtypedef void (*void_func_void_t)(void); 41610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 42610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovenum TEST_FLAG { 43610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov FEATURE = 1 << 0, 44610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov STABILITY = 1 << 1, 45610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov PERFORMANCE = 1 << 2, 46610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov EXCLUDE_FROM_ALL = 1 << 3, 47610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov NEEDS_ANNOTATIONS = 1 << 4, 48610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov RACE_DEMO = 1 << 5, 49610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov MEMORY_USAGE = 1 << 6, 50610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov PRINT_STATS = 1 << 7 51610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov}; 52610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 53610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// Put everything into stderr. 54610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovextern Mutex printf_mu; 55610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#ifndef WIN32 56610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#define printf(args...) \ 57610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov do{ \ 58610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov printf_mu.Lock();\ 59610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov fprintf(stderr, args);\ 60610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov printf_mu.Unlock(); \ 61610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov }while(0) 62610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#endif 63610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 64610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovstruct Test{ 65610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov void_func_void_t f_; 66610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov int id_; 67610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov int flags_; 68610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov Test(void_func_void_t f, int id, int flags) 69610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov : f_(f) 70610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov , id_(id) 71610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov , flags_(flags) 72610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov {} 73610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov Test() : f_(0), flags_(0) {} 74610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov void Run() { 75610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov if (flags_ & PERFORMANCE) { 76610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov long start = GetTimeInMs(); 77610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov f_(); 78610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov long end = GetTimeInMs(); 79610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov printf("*RESULT test%d: time= %4ld ms\n", id_, end - start); 80610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// printf ("Time: %4ldms\n", end-start); 81610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov } else 82610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov f_(); 83610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov } 84610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov}; 85610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 86610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovextern std::map<int, Test> *TheMapOfTests; 87610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 88610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanovstruct TestAdder { 89610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov TestAdder(void_func_void_t f, int id, int flags = FEATURE) { 90610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov if (TheMapOfTests == NULL) 91610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov TheMapOfTests = new std::map<int, Test>; 92610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov CHECK(TheMapOfTests->count(id) == 0); 93610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov (*TheMapOfTests)[id] = Test(f, id, flags); 94610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov } 95610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov}; 96610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 97610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#define REGISTER_TEST(f, id) TestAdder add_test_##id (f, id); 98610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#define REGISTER_TEST2(f, id, flags) TestAdder add_test_##id (f, id, flags); 99610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov 100610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov#endif // OLD_TEST_SUITE_H__ 101610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov// End {{{1 102610969f87667a485b9207086b3ff475bab909f95Evgeniy Stepanov // vim:shiftwidth=2:softtabstop=2:expandtab:foldmethod=marker 103