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