Files
parameter/test/mpl.cpp
CromwellEnage 278a728906 Restructure tests.
<boost/parameter/parameters.hpp>:
* Add preprocessor conditional statement to prevent generation of ill-formed function call operator overloads.

"test/maybe.cpp"
"test/singular.cpp"
"test/tutorial.cpp"
"test/sfinae.cpp"
"test/earwicker.cpp"
* Replace BOOST_PARAMETER_KEYWORD statements with BOOST_PARAMETER_NAME statements.

"test/optional_deduced_sfinae.cpp"
"test/normalized_argument_types.cpp"
"test/literate/*.cpp"
* Use Boost.Core.LightweightTest where int main() is available.
* Replace assert statements with BOOST_TEST_EQ statements.

"test/basics.hpp"
* Remove preprocessor statements regarding borland, gcc-2, and msvc workarounds.

"test/ntp.cpp"
"test/sfinae.cpp"
"test/earwicker.cpp"
"test/normalized_argument_types.cpp"
"test/basics.hpp"
* Add preprocessor conditional statement to #error out if BOOST_PARAMETER_MAX_ARITY is set to an insufficient value.

"test/basics.cpp"
"test/deduced.cpp"
"test/macros.cpp"
"test/preprocessor.cpp"
"test/preprocessor_deduced.cpp"
* Replace S and char const* expressions with boost::container::string expressions.
* Uncomment any code that fails to compile, but add preprocessor conditional statement so that test suites can incorporate compile-fail statements regarding the code in question.
* Ensure that int main() returns boost::process_errors().

"test/literate/deduced-template-parameters0.cpp":
"test/literate/exercising-the-code-so-far0.cpp":
* Enclose BOOST_MPL_ASSERT statements within MPL_TEST_CASE block.

"test/literate/defining-the-keywords1.cpp":
* Add graphs::tag::graph::qualifier type definition because perfect forwarding code will check for it.
* Replace deprecated keyword::get() invocation with keyword::instance invocation.

test/Jamfile.v2:
* Add modifier <define>BOOST_PARAMETER_MAX_ARITY=# to run, run-fail, compile, and compile-fail statements to conserve compiler memory usage on GitHub's side.
* Add modifier <preserve-target-tests>off to run and run-fail statements to conserve executable space on GitHub's side.
* Separate bpl-test statement into its own target, parameter_python_test, which fails on xcode8.3 as well as on mingw and msvc compilers with address-model=64.
* The next commit (which will implement perfect forwarding) will subsume test/literate/Jamfile.v2 into this file.  Strangely enough, attempting to do so now will result in compiler errors.

.travis.yml:
* Add g++-4.7, g++-4.8, g++-4.9, clang++-3.5, clang++-3.6, clang++-3.7, clang++-3.8, clang++-3.9, clang++-4.0, xcode7.3, and xcode8.3 compiler configurations.
* Split compiler configurations by available CXXSTD values.  (This will keep the job times within limits for the next commit.)
* Ensure that the xcode8.3 compiler configurations exclude parameter_python_test from the test suite.

appveyor.yml:
* Add compiler configurations that support address-model=64 to the test matrix.
* Ensure that the new configurations exclude parameter_python_test from the test suite.
2018-10-28 13:13:07 -04:00

119 lines
2.9 KiB
C++

// Copyright David Abrahams 2006.
// 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)
#include <boost/mpl/list.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/add_pointer.hpp>
#include <boost/parameter/config.hpp>
#include "basics.hpp"
namespace test {
template <typename Set>
struct assert_in_set
{
template <typename T>
void operator()(T*)
{
BOOST_MPL_ASSERT((boost::mpl::contains<Set,T>));
}
};
template <typename Expected, typename Params>
void f_impl(Params const& p BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected))
{
BOOST_MPL_ASSERT_RELATION(
boost::mpl::size<Expected>::value
, ==
, boost::mpl::size<Params>::value
);
boost::mpl::for_each<
Params
, boost::add_pointer<boost::mpl::_1>
>(
test::assert_in_set<Expected>()
);
}
template <
typename Expected
, typename Tester
, typename Name
, typename Value
, typename Index
>
void f(
Tester const& t
, Name const& name_
, Value const& value_
, Index const& index_
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected)
)
{
test::f_impl<Expected>(
test::f_parameters()(t, name_, value_, index_)
);
}
template <
typename Expected
, typename Tester
, typename Name
, typename Value
>
void f(
Tester const& t
, Name const& name_
, Value const& value_
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected)
)
{
test::f_impl<Expected>(test::f_parameters()(t, name_, value_));
}
template <typename Expected, typename Tester, typename Name>
void f(
Tester const& t
, Name const& name_
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected)
)
{
test::f_impl<Expected>(test::f_parameters()(t, name_));
}
void run()
{
typedef test::tag::tester tester_;
typedef test::tag::name name_;
typedef test::tag::value value_;
typedef test::tag::index index_;
test::f<boost::mpl::list4<tester_,name_,value_,index_> >(1, 2, 3, 4);
test::f<boost::mpl::list3<tester_,name_,index_> >(
1, 2, test::_index = 3
);
test::f<boost::mpl::list3<tester_,name_,index_> >(
1, test::_index = 2, test::_name = 3
);
test::f<boost::mpl::list2<name_,value_> >(
test::_name = 3, test::_value = 4
);
test::f_impl<boost::mpl::list1<value_> >(test::_value = 4);
}
}
#include <boost/core/lightweight_test.hpp>
int main()
{
test::run();
return boost::report_errors();
}