NomenNescio
NomenNescio

Reputation: 3030

Boost unit testing main function?

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 needs to be initialized before any memory is allocated, otherwise I'll get errors.

Upvotes: 12

Views: 7934

Answers (4)

Gennadiy Rozental
Gennadiy Rozental

Reputation: 1945

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 );

Upvotes: 15

NomenNescio
NomenNescio

Reputation: 3030

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

Upvotes: 8

Galimov Albert
Galimov Albert

Reputation: 7357

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)

Upvotes: 0

Abyx
Abyx

Reputation: 12918

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.

Upvotes: -1

Related Questions