libs/test/test/parameterized_test_test.cpp
// (C) Copyright Gennadiy Rozental 2002-2004. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/libs/test for the library home page. // // File : $RCSfile: parameterized_test_test.cpp,v $ // // Version : $Revision: 1.14 $ // // Description : tests parameterized tests // *************************************************************************** // Boost.Test #include <boost/test/unit_test_suite.hpp> #include <boost/test/unit_test_result.hpp> #include <boost/test/test_tools.hpp> #if !defined ( __GNUC__ ) || __GNUC__ > 2 #include <boost/test/detail/nullstream.hpp> typedef boost::onullstream onullstream_type; #else typedef boost::test_toolbox::output_test_stream onullstream_type; #endif namespace utf=boost::unit_test; #include <list> #include <iostream> #include <boost/scoped_ptr.hpp> //____________________________________________________________________________// void test0( int i ) { BOOST_CHECK( i%2 == 0 ); } //____________________________________________________________________________// void test1( int i ) { BOOST_CHECK( i%2 == 0 ); if( i%3 == 0 ) { throw 124; } } //____________________________________________________________________________// #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)) #define BOOST_PARAM_TEST_CASE__( arg1, arg2, arg3 ) \ boost::unit_test::create_test_case<int*,int>( (arg1), std::string( "" ), (arg2), (arg3) ) #else #define BOOST_PARAM_TEST_CASE__( arg1, arg2, arg3 ) BOOST_PARAM_TEST_CASE( arg1, arg2, arg3 ) #endif int test_main( int, char* [] ) { utf::unit_test_counter num_of_failures; bool exception_caught; bool passed; onullstream_type null_output; boost::scoped_ptr<utf::test_case> test; utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 2, 2, 2 }; test.reset( BOOST_PARAM_TEST_CASE__( &test0, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK( num_of_failures == 0 ); BOOST_CHECK( !exception_caught ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 1, 2, 2 }; test.reset( BOOST_PARAM_TEST_CASE__( &test0, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK( num_of_failures == 1 ); BOOST_CHECK( !exception_caught ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 1, 1, 2 }; test.reset( BOOST_PARAM_TEST_CASE__( &test0, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK_EQUAL( num_of_failures, (std::size_t)2 ); BOOST_CHECK( !exception_caught ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 1, 1, 1 }; test.reset( BOOST_PARAM_TEST_CASE__( &test0, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK_EQUAL( num_of_failures, (std::size_t)3 ); BOOST_CHECK( !exception_caught ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 6, 6, 6 }; test.reset( BOOST_PARAM_TEST_CASE__( &test1, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); passed = utf::unit_test_result::instance().has_passed(); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK_EQUAL( num_of_failures, (std::size_t)0 ); BOOST_CHECK( !exception_caught ); BOOST_CHECK( !passed ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 0, 3, 9 }; test.reset( BOOST_PARAM_TEST_CASE__( &test1, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK_EQUAL( num_of_failures, (std::size_t)2 ); BOOST_CHECK( !exception_caught ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 2, 3, 9 }; test.reset( BOOST_PARAM_TEST_CASE__( &test1, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK_EQUAL( num_of_failures, (std::size_t)2 ); BOOST_CHECK( !exception_caught ); utf::unit_test_log::instance().set_log_stream( null_output ); { utf::unit_test_result_saver saver; int test_data[] = { 3, 2, 6 }; test.reset( BOOST_PARAM_TEST_CASE__( &test1, (int*)test_data, (int*)test_data + sizeof(test_data)/sizeof(int) ) ); test->run(); utf::unit_test_result::instance().failures_details( num_of_failures, exception_caught ); } utf::unit_test_log::instance().set_log_stream( std::cout ); BOOST_CHECK_EQUAL( num_of_failures, (std::size_t)1 ); BOOST_CHECK( !exception_caught ); return 0; } //____________________________________________________________________________// // *************************************************************************** // Revision History : // // $Log: parameterized_test_test.cpp,v $ // Revision 1.14 2004/05/21 06:26:10 rogeeff // licence update // // Revision 1.13 2004/05/11 11:05:06 rogeeff // basic_cstring introduced and used everywhere // class properties reworked // namespace names shortened // // Revision 1.12 2003/12/03 01:22:40 rogeeff // *** empty log message *** // // Revision 1.11 2003/12/01 00:42:37 rogeeff // prerelease cleaning // // *************************************************************************** // EOF