1 /* 2 This file is part of Valgrind, a dynamic binary instrumentation 3 framework. 4 5 Copyright (C) 2008-2008 Google Inc 6 opensource@google.com 7 8 This program is free software; you can redistribute it and/or 9 modify it under the terms of the GNU General Public License as 10 published by the Free Software Foundation; either version 2 of the 11 License, or (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, but 14 WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 21 02111-1307, USA. 22 23 The GNU General Public License is contained in the file COPYING. 24 */ 25 26 /* Author: Konstantin Serebryany <opensource@google.com> 27 28 This file contains a simple test suite for some of our old unit-tests. 29 These tests are likely to be moved to googletest framework over time. 30 */ 31 #ifndef OLD_TEST_SUITE_H__ 32 #define OLD_TEST_SUITE_H__ 33 34 #include <map> 35 #include <set> 36 #include <cstring> 37 38 #include "test_utils.h" 39 40 typedef void (*void_func_void_t)(void); 41 42 enum TEST_FLAG { 43 FEATURE = 1 << 0, 44 STABILITY = 1 << 1, 45 PERFORMANCE = 1 << 2, 46 EXCLUDE_FROM_ALL = 1 << 3, 47 NEEDS_ANNOTATIONS = 1 << 4, 48 RACE_DEMO = 1 << 5, 49 MEMORY_USAGE = 1 << 6, 50 PRINT_STATS = 1 << 7 51 }; 52 53 // Put everything into stderr. 54 extern Mutex printf_mu; 55 #ifndef WIN32 56 #define printf(args...) \ 57 do{ \ 58 printf_mu.Lock();\ 59 fprintf(stderr, args);\ 60 printf_mu.Unlock(); \ 61 }while(0) 62 #endif 63 64 struct Test{ 65 void_func_void_t f_; 66 int id_; 67 int flags_; TestTest68 Test(void_func_void_t f, int id, int flags) 69 : f_(f) 70 , id_(id) 71 , flags_(flags) 72 {} TestTest73 Test() : f_(0), flags_(0) {} RunTest74 void Run() { 75 if (flags_ & PERFORMANCE) { 76 long start = GetTimeInMs(); 77 f_(); 78 long end = GetTimeInMs(); 79 printf("*RESULT test%d: time= %4ld ms\n", id_, end - start); 80 // printf ("Time: %4ldms\n", end-start); 81 } else 82 f_(); 83 } 84 }; 85 86 extern std::map<int, Test> *TheMapOfTests; 87 88 struct TestAdder { 89 TestAdder(void_func_void_t f, int id, int flags = FEATURE) { 90 if (TheMapOfTests == NULL) 91 TheMapOfTests = new std::map<int, Test>; 92 CHECK(TheMapOfTests->count(id) == 0); 93 (*TheMapOfTests)[id] = Test(f, id, flags); 94 } 95 }; 96 97 #define REGISTER_TEST(f, id) TestAdder add_test_##id (f, id); 98 #define REGISTER_TEST2(f, id, flags) TestAdder add_test_##id (f, id, flags); 99 100 #endif // OLD_TEST_SUITE_H__ 101 // End {{{1 102 // vim:shiftwidth=2:softtabstop=2:expandtab:foldmethod=marker 103