How do I define my own main()
function when testing with boost?
Boost is using it\'s own main function, but I\'m using a custom memory manager and it ne
I do not believe you actually need your own main. I think you are much better off with global fixture:
struct AllocatorSetup {
AllocatorSetup() { /* setup your allocator here */ }
~AllocatorSetup() { /* shutdown your allocator/check memory leaks here */ }
};
BOOST_GLOBAL_FIXTURE( AllocatorSetup );
You have to define
BOOST_TEST_NO_MAIN
before the boost includes.
BOOST_TEST_MAIN
is the default. http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/utf/compilation.html
You can define a static object and his constructor will execute before main:
class Alloc_Setup {
Alloc_Setup() {
// Your init code
}
~Alloc_Setup() {
// Your cleanup
}
};
Alloc_Setup setup;
int main() {} // (generated by boost)
Memory can be allocated before main
:
static int* x = new int(1);
int main() { return *x; }
And you could make your memory manager a global variable as well,
but you can't enforce a specific order of global variables initialization. (in standard C++ at least)
In Windows you could put your memory manager into a DLL, at it will be initialized before application entry point will be called, but still, something other may allocate a memory before - another DLL, or CRT of your DLL.