I'm get a SIGEGV segmentation fault only when trying to
register a test manually. Everything works just fine if I use auto
registration. All compiles and links in both cases are without
error. I know almost nothing about using gdb, but I was able to see
the segment violation message shown below.
I'm running Boost 1.58.0; Windows 7.1 64-bit; MinGW 4.9.2 64-bit;
Eclipse Luna; CDT 8.6.0
In my TestMain.cpp
#define BOOST_TEST_ALTERNATIVE_INIT_API
#define BOOST_TEST_NO_MAIN
#include "boost/test/unit_test.hpp"
extern void Operand_Default_Constructor_Test();
bool init_unit_test() {
framework::master_test_suite().p_name.value = "DiGSE
Master Test";
framework::master_test_suite().add(BOOST_TEST_CASE(&Operand_Default_Constructor_Test));
return true;
}
int main(int argc, char* argv[]) {
return
boost::unit_test::unit_test_main(&init_unit_test, argc, argv);
}
It compiles and links without error. However, executing it gives
this SIGEGV fault:
Program received signal SIGSEGV, Segmentation fault.
0x000000006b405a12 in boost::unit_test::framework::get
(id=1,
t=boost::unit_test::tut_suite) at
./boost/test/impl/framework.ipp:388
388 if( (res->p_type & t) == 0 )
The failing snippet is part of a test that would throw
internal_error(), but the if test itself seems to fail.
if( (res->p_type & t) == 0 )
throw internal_error( "Invalid test unit type" );
If the Operand_Default_Constructor_Test test is changed from
void Operand_Default_Constructor_Test()
to
BOOST_AUTO_TEST_CASE(Operand_Default_Constructor_Test)
and the contents of init_unit_test() are removed, it works
just fine with automatic registration. And the automatic
registration is certainly the easiest way; but I was holding out
hope for being able to specify test ordering.
Merrill Cornish