Boost logo

Boost Users :

Subject: Re: [Boost-users] nested template tests using boost.test BOOST_AUTO_TEST_CASE_TEMPLATE
From: Gennadiy Rozental (rogeeff_at_[hidden])
Date: 2008-10-17 21:12:26


johanngoetz <jgoetz <at> ucla.edu> writes:

> It seems that one cannot do nested AUTO_TEST_CASE_TEMPLATE's with boost.test.

No. Neither of the Boost.Test test cases really support this kind of usage

> Is there another way around this (besides unrolling manually)? I wish to do

Not really manually, but you will have to linearize it

> something like the following: i.e. testing every combination of two (or
> more?) lists of types. Example below. Thank you, Johann.
>
> define BOOST_TEST_MODULE std_map
> #define BOOST_TEST_DYN_LINK
> #include <map>
> #include <boost/test/unit_test.hpp>
> #include <boost/test/test_case_template.hpp>
> #include <boost/mpl/list.hpp>
> typedef boost::mpl::list<short, int, long, long long> test_int_types;
> typedef boost::mpl::list<float, double, long double> test_float_types;

I believe MPL have something to help here. What you need is to have linear_view
like this:

typedef linear_view<test_init_types,test_float_types>::type test_types;
 
> BOOST_AUTO_TEST_SUITE( std_map_suite )
> BOOST_AUTO_TEST_CASE_TEMPLATE( int_template_case, Ti, test_int_types ) {

Now you can write:
  BOOST_AUTO_TEST_CASE_TEMPLATE( test_case, TT, test_types ) {
> ) {
> std::map<Ti, Tf> m;

and use like this:

         std::map<TT::first, TT::second> m;

> m.insert(std::make_pair((Ti)0,(Tf)0));
> BOOST_CHECK_EQUAL(m.size(), size_t(1));
> }
> }
> BOOST_AUTO_TEST_SUITE_END()

Gennadiy


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net