19#ifndef _CODA_MEMORY_H_
20#define _CODA_MEMORY_H_ 1
26#include <valgrind/memcheck.h>
32#include "gtest/gtest.h"
34#define PRINT_FAILURE_MESSAGE \
35 const ::testing::TestInfo *const test_info = \
36 ::testing::UnitTest::GetInstance()->current_test_info(); \
37 const ::testing::TestResult *res = test_info->result(); \
38 for (int i = 0; i < res->total_part_count(); i++) { \
39 const testing::TestPartResult part_res = res->GetTestPartResult(i); \
40 std::cout << part_res.file_name() << ":" << part_res.line_number() \
41 << " Failure" << std::endl; \
42 std::cout << part_res.summary() << std::endl; \
45#define TEST_FOR_MEMORY_LEAKS_SETUP \
46 unsigned long base_definite, base_dubious, base_reachable, \
48 unsigned long leaked, dubious, reachable, suppressed; \
49 VALGRIND_DO_LEAK_CHECK; \
50 VALGRIND_COUNT_LEAKS(base_definite, base_dubious, base_reachable, \
53#define TEST_FOR_MEMORY_LEAKS_CHECK \
54 VALGRIND_DO_LEAK_CHECK; \
55 VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed); \
56 EXPECT_EQ(base_definite, leaked) << "Memory Leak found"; \
57 EXPECT_EQ(base_dubious, dubious) << "Memory Leak found"; \
58 EXPECT_EQ(base_reachable, reachable) << "Memory Leak found"; \
59 EXPECT_EQ(base_suppressed, suppressed) << "Memory Leak found";
61#define RVM_LAUNCH_IN_INSTANCE(function) \
63 TEST_FOR_MEMORY_LEAKS_SETUP \
65 VALGRIND_DO_LEAK_CHECK; \
66 VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, \
68 TEST_FOR_MEMORY_LEAKS_CHECK \
69 ::testing::Test::TearDownTestCase(); \
70 if (::testing::Test::HasFailure()) { \
71 PRINT_FAILURE_MESSAGE \
73 exit(::testing::Test::HasFailure() ? 1 : 0); \
75 ::testing::ExitedWithCode(0), ".*");
80#define RVM_TEST(test_case_name, test) \
81 static void test_case_name##_##test##_RvmTest(); \
82 TEST(test_case_name, test) \
84 RVM_LAUNCH_IN_INSTANCE(test_case_name##_##test##_RvmTest) \
86 static void test_case_name##_##test##_RvmTest()
88#define RVM_TEST_F(test_case_name, test) \
89 static void test_case_name##_##test##_RvmTest(); \
90 TEST_F(test_case_name, test) \
92 RVM_LAUNCH_IN_INSTANCE(test_case_name##_##test##_RvmTest) \
94 static void test_case_name##_##test##_RvmTest()