Hi,

Just wanted a second opinion on how best to handle calling functions which invoke BOOST_REQUIRE and BOOST_CHECK type logic.

For example, if I have a test like:

void stuff( ... )
{
    BOOST_REQUIRE( ... );
    BOOST_CHECK( ... ); 
}

BOOST_AUTO_TEST( check_stuff )
{
    stuff( case1 );
    stuff( case2 );
    stuff( case3 );
}

in the CLF log case at least, I only see which lines in stuff failed, but not which which case.

I can change things so that we have:

bool stuff( ... )
{
    bool result = true;
    if ( ( result = require-predicate ) == true )
        result = check-predicate;
    return result;
}

BOOST_AUTO_TEST( check_stuff )
{
    BOOST_CHECK( stuff( case1 ) );
    BOOST_CHECK( stuff( case2 ) );
    BOOST_CHECK( stuff( case3 ) );
}

but then I lose the info in the logs over which predicates are failing and it's generally a bit nasty :).

As a result, I've been playing with this which seems to encapsulate things pretty well for me (though may introduce more parenthesis than is strictly necessary and may introduce shadowed variables and other issues?):

#define BOOL_CHECK( result, pred ) { bool pred_result; BOOST_CHECK( pred_result = ( pred ) ); result = pred_result && result; }
#define BOOL_REQUIRE( pred ) { bool pred_result; BOOST_CHECK( pred_result = ( pred ) ); if ( !pred_result ) return pred_result; }
#define BOOL_REQUIRE_EQUAL( name, value ) { bool pred_result; BOOST_CHECK( pred_result = ( ( name ) == ( value ) ) ); if ( !pred_result ) return pred_result; }

void stuff( ... )
{
    bool result = true;
    BOOL_REQUIRE( ... );
    BOOL_CHECK( result, ... ); 
    return result;
}

BOOST_AUTO_TEST( check_stuff )
{
    BOOST_CHECK( stuff( case1 ) );
    BOOST_CHECK( stuff( case2 ) );
    BOOST_CHECK( stuff( case3 ) );
}

when one of the predicates fails, I get 2 errors in the log - the first being the specific line in 'stuff' and the second being failing case.

I've only tested it with g++ and don't know if it's a sensible approach - wondered if any of you guys had any suggestions?

Cheers,

Charlie