1 // (C) Copyright Raffi Enficiaud 2019.
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 // Extends #12092 with arbitrary type list
7 // see https://svn.boost.org/trac10/ticket/13418 and
8 // https://github.com/boostorg/test/issues/141
9 // ***************************************************************************
12 #define BOOST_TEST_MODULE template_test_case_with_variadic
13 #include <boost/test/unit_test.hpp>
14 #include <boost/test/unit_test_log.hpp>
15 #include <boost/test/results_collector.hpp>
16 #include <boost/test/utils/nullstream.hpp>
17 typedef boost::onullstream onullstream_type
;
19 #include <boost/mpl/integral_c.hpp>
21 // tuple already done in another test module
26 namespace ut
= boost::unit_test
;
27 namespace mpl
= boost::mpl
;
32 logger_guard(std::ostream
& s_out
) {
33 ut::unit_test_log
.set_stream( s_out
);
36 ut::unit_test_log
.set_stream( std::cout
);
40 template <class ... T
>
46 //____________________________________________________________________________//
48 BOOST_TEST_CASE_TEMPLATE_FUNCTION( test0
, Number
)
50 BOOST_TEST( 2 == (int)Number::value
);
53 BOOST_AUTO_TEST_CASE( test0_only_2
)
55 onullstream_type null_output
;
56 logger_guard
G(null_output
);
58 typedef dummy1
< mpl::integral_c
<int,2> > only_2
;
60 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
62 test
->add( BOOST_TEST_CASE_TEMPLATE( test0
, only_2
) );
64 test
->p_default_status
.value
= ut::test_unit::RS_ENABLED
;
65 ut::framework::finalize_setup_phase( test
->p_id
);
66 ut::framework::run( test
);
67 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
69 ut::unit_test_log
.set_stream( std::cout
);
70 BOOST_TEST( tr
.p_assertions_failed
== 0U );
71 BOOST_TEST( !tr
.p_aborted
);
74 BOOST_AUTO_TEST_CASE( test1_with_9_errors
)
76 onullstream_type null_output
;
77 logger_guard
G(null_output
);
80 mpl::integral_c
<int,0>,
81 mpl::integral_c
<int,1>,
82 mpl::integral_c
<int,2>,
83 mpl::integral_c
<int,3>,
84 mpl::integral_c
<int,4>,
85 mpl::integral_c
<int,5>,
86 mpl::integral_c
<int,6>,
87 mpl::integral_c
<int,7>,
88 mpl::integral_c
<int,8>,
89 mpl::integral_c
<int,9>
92 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
94 test
->add( BOOST_TEST_CASE_TEMPLATE( test0
, range_10
) );
96 test
->p_default_status
.value
= ut::test_unit::RS_ENABLED
;
97 ut::framework::finalize_setup_phase( test
->p_id
);
98 ut::framework::run( test
);
99 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
101 ut::unit_test_log
.set_stream( std::cout
);
102 BOOST_TEST( tr
.p_assertions_failed
== 9U );
103 BOOST_TEST( !tr
.p_aborted
);
108 BOOST_TEST_CASE_TEMPLATE_FUNCTION( test_counter
, Number
)
110 BOOST_TEST( counter
++ == (int)Number::value
);
113 BOOST_AUTO_TEST_CASE( test_left_to_right_evaluation
)
115 onullstream_type null_output
;
116 logger_guard
G(null_output
);
119 mpl::integral_c
<int,0>,
120 mpl::integral_c
<int,1>,
121 mpl::integral_c
<int,2>,
122 mpl::integral_c
<int,3>,
123 mpl::integral_c
<int,4>,
124 mpl::integral_c
<int,5>,
125 mpl::integral_c
<int,6>,
126 mpl::integral_c
<int,7>,
127 mpl::integral_c
<int,8>,
128 mpl::integral_c
<int,9>
131 ut::test_suite
* test
= BOOST_TEST_SUITE( "" );
133 test
->add( BOOST_TEST_CASE_TEMPLATE( test_counter
, range_10
) );
135 test
->p_default_status
.value
= ut::test_unit::RS_ENABLED
;
136 ut::framework::finalize_setup_phase( test
->p_id
);
137 ut::framework::run( test
);
138 ut::test_results
const& tr
= ut::results_collector
.results( test
->p_id
);
140 ut::unit_test_log
.set_stream( std::cout
);
141 BOOST_TEST( tr
.p_assertions_failed
== 0U );
142 BOOST_TEST( !tr
.p_aborted
);
147 mpl::integral_c
<int,1>,
148 mpl::integral_c
<int,3>,
149 mpl::integral_c
<int,5>,
150 mpl::integral_c
<int,6>,
151 mpl::integral_c
<int,7>,
152 mpl::integral_c
<int,8>,
153 mpl::integral_c
<int,9>
156 BOOST_AUTO_TEST_CASE_TEMPLATE(odd_or_above_5
, T
, range_special
) {
157 BOOST_TEST( (T::value
% 2 || T::value
>= 5 ) );