summaryrefslogtreecommitdiff
path: root/tests/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/main.cpp')
-rw-r--r--tests/main.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/main.cpp b/tests/main.cpp
index 021c253..03ad2f5 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -1,6 +1,7 @@
#include "test.hpp"
#include "allocator.hpp"
+#include <new>
#include <exception>
#include <stdio.h>
#include <float.h>
@@ -51,6 +52,60 @@ static void replace_memory_management()
pugi::set_memory_management_functions(custom_allocate, custom_deallocate);
}
+#ifdef __GNUC__
+#define DECL_THROW(e) throw(e)
+#define DECL_NOTHROW() throw()
+#else
+#define DECL_THROW(e)
+#define DECL_NOTHROW()
+#endif
+
+void* operator new(size_t size) DECL_THROW(std::bad_alloc)
+{
+ void* result = custom_allocate(size);
+
+#ifndef PUGIXML_NO_EXCEPTIONS
+ if (!result) throw std::bad_alloc();
+#endif
+
+ return result;
+}
+
+void* operator new[](size_t size) DECL_THROW(std::bad_alloc)
+{
+ return operator new(size);
+}
+
+void* operator new(size_t size, const std::nothrow_t&) throw()
+{
+ return custom_allocate(size);
+}
+
+void* operator new[](size_t size, const std::nothrow_t&) throw()
+{
+ return custom_allocate(size);
+}
+
+void operator delete(void* ptr) DECL_NOTHROW()
+{
+ custom_deallocate(ptr);
+}
+
+void operator delete[](void* ptr) DECL_NOTHROW()
+{
+ custom_deallocate(ptr);
+}
+
+void operator delete(void* ptr, const std::nothrow_t&) throw()
+{
+ custom_deallocate(ptr);
+}
+
+void operator delete[](void* ptr, const std::nothrow_t&) throw()
+{
+ custom_deallocate(ptr);
+}
+
#if defined(_MSC_VER) && _MSC_VER > 1200 && _MSC_VER < 1400 && !defined(__INTEL_COMPILER) && !defined(__DMC__)
namespace std
{