diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index a09ba68..5037474 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -4,13 +4,18 @@ import testing ; +alias unit_test_framework + : # sources + /boost//unit_test_framework + ; + test-suite array : - [ run array0.cpp ] + [ run array0.cpp unit_test_framework : : : : array0 ] [ run array1.cpp ] [ run array2.cpp ] [ run array3.cpp ] [ run array4.cpp ] [ run array5.cpp ] - [ run array6.cpp ] - [ run array_hash.cpp ] + [ run array6.cpp unit_test_framework : : : : array6 ] + [ run array_hash.cpp unit_test_framework : : : : array_hash ] ; diff --git a/test/array0.cpp b/test/array0.cpp index d75db76..c1c047e 100644 --- a/test/array0.cpp +++ b/test/array0.cpp @@ -9,18 +9,15 @@ #include #include -namespace { -unsigned int failed_tests = 0; +#define BOOST_TEST_MAIN +#include -void fail_test( const char * reason ) { - ++failed_tests; - std::cerr << "Test failure " << failed_tests << ": " << reason << std::endl; -} +namespace { template< class T > void BadValue( const T & ) { - fail_test( "Unexpected value" ); + BOOST_CHECK ( false ); } template< class T > @@ -36,46 +33,24 @@ void RunTests() // front/back and operator[] must compile, but calling them is undefined // Likewise, all tests below should evaluate to false, avoiding undefined behaviour - if( !test_case.empty() ) { - BadValue( test_case.front() ); - } + BOOST_CHECK ( test_case.empty()); + BOOST_CHECK ( const_test_case.empty()); - if( !const_test_case.empty() ) { - BadValue( const_test_case.back() ); - } - - if( test_case.size() > 0 ) { - BadValue( test_case[ 0 ] ); - } - - if( const_test_case.max_size() > 0 ) { - BadValue( const_test_case[ 0 ] ); - } + BOOST_CHECK ( test_case.size() == 0 ); + BOOST_CHECK ( const_test_case.size() == 0 ); // Assert requirements of TR1 6.2.2.4 - if( test_case.begin() != test_case.end() ) { - fail_test( "Not an empty range" ); - } - if( test_case.cbegin() != test_case.cend() ) { - fail_test( "Not an empty range" ); - } - if( const_test_case.begin() != const_test_case.end() ) { - fail_test( "Not an empty range" ); - } - if( const_test_case.cbegin() != const_test_case.cend() ) { - fail_test( "Not an empty range" ); - } - - if( test_case.begin() == const_test_case.begin() ) { - fail_test( "iterators for different containers are not distinct" ); - } + BOOST_CHECK ( test_case.begin() == test_case.end()); + BOOST_CHECK ( test_case.cbegin() == test_case.cend()); + BOOST_CHECK ( const_test_case.begin() == const_test_case.end()); + BOOST_CHECK ( const_test_case.cbegin() == const_test_case.cend()); + BOOST_CHECK ( test_case.begin() != const_test_case.begin() ); if( test_case.data() == const_test_case.data() ) { // Value of data is unspecified in TR1, so no requirement this test pass or fail // However, it must compile! } - // Check can safely use all iterator types with std algorithms std::for_each( test_case.begin(), test_case.end(), BadValue< T > ); std::for_each( test_case.rbegin(), test_case.rend(), BadValue< T > ); @@ -87,12 +62,12 @@ void RunTests() // Check swap is well formed std::swap( test_case, test_case ); - // Check assigment operator and overloads are well formed + // Check assignment operator and overloads are well formed test_case = const_test_case; // Confirm at() throws the std lib defined exception try { - BadValue( test_case.at( 0 ) ); + BadValue( test_case.at( 0 )); } catch ( const std::out_of_range & ) { } @@ -104,12 +79,11 @@ void RunTests() } -int main() +BOOST_AUTO_TEST_CASE( test_main ) { RunTests< bool >(); RunTests< void * >(); RunTests< long double >(); RunTests< std::string >(); - return failed_tests; } diff --git a/test/array6.cpp b/test/array6.cpp index 658cec6..3d737fd 100644 --- a/test/array6.cpp +++ b/test/array6.cpp @@ -10,39 +10,31 @@ #include #include +#define BOOST_TEST_MAIN +#include + namespace { -unsigned int failed_tests = 0; - -void fail_test( const char * reason ) { - ++failed_tests; - std::cerr << "Test failure " << failed_tests << ": " << reason << std::endl; -} - -template< class T > -void RunTests() -{ - typedef boost::array< T, 5 > test_type; - typedef T arr[5]; - test_type test_case; // = { 1, 1, 2, 3, 5 }; + template< class T > + void RunTests() + { + typedef boost::array< T, 5 > test_type; + typedef T arr[5]; + test_type test_case; // = { 1, 1, 2, 3, 5 }; - arr &aRef = get_c_array ( test_case ); - if ( &*test_case.begin () != &aRef[0] ) - fail_test ( "Array6: Same thing not equal?(1)" ); + arr &aRef = get_c_array ( test_case ); + BOOST_CHECK ( &*test_case.begin () == &aRef[0] ); - const arr &caRef = get_c_array ( test_case ); - typename test_type::const_iterator iter = test_case.begin (); - if ( &*iter != &caRef[0] ) - fail_test ( "Array6: Same thing not equal?(2)" ); + const arr &caRef = get_c_array ( test_case ); + typename test_type::const_iterator iter = test_case.begin (); + BOOST_CHECK ( &*iter == &caRef[0] ); + } } -} - -int main() +BOOST_AUTO_TEST_CASE( test_main ) { RunTests< bool >(); RunTests< void * >(); RunTests< long double >(); RunTests< std::string >(); - return failed_tests; } diff --git a/test/array_hash.cpp b/test/array_hash.cpp index 474e29c..a83eead 100644 --- a/test/array_hash.cpp +++ b/test/array_hash.cpp @@ -11,39 +11,33 @@ #include #include +#define BOOST_TEST_MAIN +#include + namespace { -unsigned int failed_tests = 0; -void fail_test( const char * reason ) { - ++failed_tests; - std::cerr << "Test failure " << failed_tests << ": " << reason << std::endl; -} - -template< class T > -void RunTests() -{ -// std::size_t hash0 = boost::hash > () ( boost::array ()); -// std::size_t hash1 = boost::hash > () ( boost::array ()); + template< class T > + void RunTests() + { + // std::size_t hash0 = boost::hash > () ( boost::array ()); + // std::size_t hash1 = boost::hash > () ( boost::array ()); - typedef boost::array< T, 5 > barr; - typedef T arr[5]; - barr test_barr = {{ 1, 1, 2, 3, 5 }}; - arr test_arr = { 1, 1, 2, 3, 5 }; + typedef boost::array< T, 5 > barr; + typedef T arr[5]; + barr test_barr = {{ 1, 1, 2, 3, 5 }}; + arr test_arr = { 1, 1, 2, 3, 5 }; - std::size_t bhash = boost::hash () ( test_barr ); - std::size_t ahash = boost::hash () ( test_arr ); - if ( ahash != bhash ) - fail_test ( "Array_hash: Hash-mismatch on " ); -} + std::size_t bhash = boost::hash () ( test_barr ); + std::size_t ahash = boost::hash () ( test_arr ); + BOOST_CHECK ( ahash == bhash ); + } } -int main() +BOOST_AUTO_TEST_CASE( test_main ) { RunTests< int >(); RunTests< long >(); RunTests< long double >(); - - return failed_tests; }