12ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Copyright 2009 The RE2 Authors.  All Rights Reserved.
22ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Use of this source code is governed by a BSD-style
32ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// license that can be found in the LICENSE file.
42ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
52ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#ifndef RE2_UTIL_TEST_H__
62ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define RE2_UTIL_TEST_H__
72ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
82ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#include "util/util.h"
92ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#include "util/flags.h"
102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define TEST(x, y) \
122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson	void x##y(void); \
132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson	TestRegisterer r##x##y(x##y, # x "." # y); \
142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson	void x##y(void)
152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonvoid RegisterTest(void (*)(void), const char*);
172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonclass TestRegisterer {
192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson public:
202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  TestRegisterer(void (*fn)(void), const char *s) {
212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    RegisterTest(fn, s);
222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson};
242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// TODO(rsc): Do a better job.
262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_EQ CHECK_EQ
272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_TRUE CHECK
282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_LT CHECK_LT
292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_GT CHECK_GT
302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_LE CHECK_LE
312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_GE CHECK_GE
322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_FALSE(x) CHECK(!(x))
332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define ARRAYSIZE arraysize
352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_TRUE_M(x, y) CHECK(x) << (y)
372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define EXPECT_FALSE_M(x, y) CHECK(!(x)) << (y)
382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define ASSERT_TRUE_M(x, y) CHECK(x) << (y)
392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define ASSERT_EQUALS(x, y) CHECK_EQ(x, y)
402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonconst bool UsingMallocCounter = false;
422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonnamespace testing {
432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonclass MallocCounter {
442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson public:
452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  MallocCounter(int x) { }
462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  static const int THIS_THREAD_ONLY = 0;
472ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  long long HeapGrowth() { return 0; }
482ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  long long PeakHeapGrowth() { return 0; }
492ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  void Reset() { }
502ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson};
512ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson}  // namespace testing
522ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
532ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonnamespace re2 {
542ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonint64 VirtualProcessSize();
552ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} // namespace re2
562ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
572ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#endif  // RE2_UTIL_TEST_H__
58