1 // (C) Copyright Gennadiy Rozental 2002-2015.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
6 // See http://www.boost.org/libs/test for the library home page.
8 // Description : tests parameterized tests
9 // Note: this file should be compatible with C++03 compilers (features in boost.test v2)
10 // ***************************************************************************
13 #define BOOST_TEST_MAIN
14 #include <boost/test/unit_test.hpp>
15 #include <boost/test/parameterized_test.hpp>
16 #include <boost/test/unit_test_log.hpp>
17 #include <boost/test/results_collector.hpp>
18 #include <boost/test/utils/nullstream.hpp>
19 typedef boost::onullstream onullstream_type
;
21 namespace ut
= boost::unit_test
;
24 #include <boost/scoped_ptr.hpp>
30 //____________________________________________________________________________//
34 BOOST_TEST( (i
%2 == 0) ); // amounts to BOOST_CHECK, for backward compatibility wrt. boost.test v2
37 //____________________________________________________________________________//
41 BOOST_TEST( (i
%2 == 0) );
47 //____________________________________________________________________________//
50 setup_tree( ut::test_suite
* master_tu
)
52 master_tu
->p_default_status
.value
= ut::test_unit::RS_ENABLED
;
53 ut::framework::finalize_setup_phase( master_tu
->p_id
);
56 //____________________________________________________________________________//
59 logger_guard(std::ostream
& s_out
) {
60 ut::unit_test_log
.set_stream( s_out
);
63 ut::unit_test_log
.set_stream( std::cout
);
67 BOOST_AUTO_TEST_CASE( test_case1
)
69 // if an exception is thrown in the test, this object is destructed when we reach the logger
70 // for logging the exception. This happens for instance if the test->add throws:
71 // - test case aborted, null_output destructed but still refered from the logger
72 // - exception caught by the framework, and exception content logged
73 // - reference to a non-existing log stream
74 onullstream_type null_output
;
75 logger_guard
G( null_output
);
77 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
78 int test_data
[] = { 2, 2, 2 };
79 test
->add( BOOST_PARAM_TEST_CASE( &test0
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
82 ut::framework::run( test
);
83 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
85 ut::unit_test_log
.set_stream( std::cout
);
86 BOOST_TEST( tr
.p_assertions_failed
== 0U );
87 BOOST_TEST( !tr
.p_aborted
);
90 //____________________________________________________________________________//
92 BOOST_AUTO_TEST_CASE( test_case2
)
94 onullstream_type null_output
;
95 logger_guard
G( null_output
);
97 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
98 int test_data
[] = { 1, 2, 2 };
99 test
->add( BOOST_PARAM_TEST_CASE( &test0
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
102 ut::framework::run( test
);
103 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
105 ut::unit_test_log
.set_stream( std::cout
);
106 BOOST_TEST( tr
.p_assertions_failed
== 1U );
107 BOOST_TEST( !tr
.p_aborted
);
110 //____________________________________________________________________________//
112 BOOST_AUTO_TEST_CASE( test_case3
)
114 onullstream_type null_output
;
115 logger_guard
G( null_output
);
117 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
118 int test_data
[] = { 1, 1, 2 };
119 test
->add( BOOST_PARAM_TEST_CASE( &test0
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
122 ut::framework::run( test
);
123 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
125 ut::unit_test_log
.set_stream( std::cout
);
126 BOOST_TEST( tr
.p_assertions_failed
== 2U );
127 BOOST_TEST( !tr
.p_aborted
);
130 //____________________________________________________________________________//
132 BOOST_AUTO_TEST_CASE( test_case4
)
134 onullstream_type null_output
;
135 logger_guard
G( null_output
);
137 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
138 int test_data
[] = { 1, 1, 1 };
139 test
->add( BOOST_PARAM_TEST_CASE( &test0
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
142 ut::framework::run( test
);
143 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
145 ut::unit_test_log
.set_stream( std::cout
);
146 BOOST_TEST( tr
.p_assertions_failed
== 3U );
147 BOOST_TEST( !tr
.p_aborted
);
150 //____________________________________________________________________________//
152 BOOST_AUTO_TEST_CASE( test_case5
)
154 onullstream_type null_output
;
155 logger_guard
G( null_output
);
157 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
158 int test_data
[] = { 6, 6, 6 };
159 test
->add( BOOST_PARAM_TEST_CASE( &test1
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
162 ut::framework::run( test
);
163 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
165 ut::unit_test_log
.set_stream( std::cout
);
166 BOOST_TEST( tr
.p_assertions_failed
== 3U );
167 BOOST_TEST( !tr
.p_aborted
);
168 BOOST_TEST( !tr
.passed() );
171 //____________________________________________________________________________//
173 BOOST_AUTO_TEST_CASE( test_case6
)
175 onullstream_type null_output
;
176 logger_guard
G( null_output
);
178 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
179 int test_data
[] = { 0, 3, 9 };
180 test
->add( BOOST_PARAM_TEST_CASE( &test1
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
183 ut::framework::run( test
);
184 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
186 ut::unit_test_log
.set_stream( std::cout
);
187 BOOST_TEST( tr
.p_assertions_failed
== 5U );
188 BOOST_TEST( !tr
.p_aborted
);
191 //____________________________________________________________________________//
193 BOOST_AUTO_TEST_CASE( test_case7
)
195 onullstream_type null_output
;
196 logger_guard
G( null_output
);
198 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
199 int test_data
[] = { 2, 3, 9 };
200 test
->add( BOOST_PARAM_TEST_CASE( &test1
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
203 ut::framework::run( test
);
204 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
206 ut::unit_test_log
.set_stream( std::cout
);
207 BOOST_TEST( tr
.p_assertions_failed
== 4U );
208 BOOST_TEST( !tr
.p_aborted
);
211 //____________________________________________________________________________//
213 BOOST_AUTO_TEST_CASE( test_case8
)
215 onullstream_type null_output
;
216 logger_guard
G( null_output
);
218 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
219 int test_data
[] = { 3, 2, 6 };
220 test
->add( BOOST_PARAM_TEST_CASE( &test1
, (int*)test_data
, (int*)test_data
+ sizeof(test_data
)/sizeof(int) ) );
223 ut::framework::run( test
);
224 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
226 ut::unit_test_log
.set_stream( std::cout
);
227 BOOST_TEST( tr
.p_assertions_failed
== 3U );
228 BOOST_TEST( !tr
.p_aborted
);
231 //____________________________________________________________________________//