From c4fbc83cd021b46fb84ab2e55d9da0caaa8a4bb5 Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Tue, 20 Oct 2009 21:36:29 +0000 Subject: tests: Added memory leak detection git-svn-id: http://pugixml.googlecode.com/svn/trunk@165 99668b35-9821-0410-8761-19e4c4f06640 --- tests/main.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'tests/main.cpp') diff --git a/tests/main.cpp b/tests/main.cpp index 55903b9..664f171 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -3,10 +3,53 @@ #include #include +#include + test_runner* test_runner::_tests = 0; +size_t test_runner::_memory_fail_threshold = 0; + +size_t g_memory_total_size = 0; + +void* custom_allocate(size_t size) +{ + if (test_runner::_memory_fail_threshold > 0 && test_runner::_memory_fail_threshold < size) + return 0; + else + { + void* ptr = malloc(size); + + g_memory_total_size += _msize(ptr); + + return ptr; + } +} + +void custom_deallocate(void* ptr) +{ + if (ptr) + { + g_memory_total_size -= _msize(ptr); + + free(ptr); + } +} + +void replace_memory_management() +{ + // create some document to touch original functions + { + pugi::xml_document doc; + doc.append_child().set_name("node"); + } + + // replace functions + pugi::set_memory_management_functions(custom_allocate, custom_deallocate); +} int main() { + replace_memory_management(); + unsigned int total = 0; unsigned int passed = 0; @@ -15,7 +58,14 @@ int main() try { total++; + + g_memory_total_size = 0; + test_runner::_memory_fail_threshold = 0; + test->run(); + + if (g_memory_total_size != 0) throw "Memory leaks found"; + passed++; } catch (const std::exception& e) -- cgit v1.2.3