mirror of
https://github.com/boostorg/fusion.git
synced 2025-07-29 12:07:36 +02:00
Merge upstream branch 'develop' into more-ci-targets
This commit is contained in:
@ -237,6 +237,7 @@ project
|
||||
[ run sequence/ref_vector.cpp ]
|
||||
[ run sequence/flatten_view.cpp ]
|
||||
[ compile sequence/github-159.cpp ]
|
||||
[ run sequence/github-176.cpp ]
|
||||
|
||||
[ compile sequence/size.cpp ]
|
||||
|
||||
@ -254,6 +255,7 @@ project
|
||||
[ run functional/invoke_procedure.cpp ]
|
||||
[ run sequence/swap.cpp ]
|
||||
|
||||
[ compile support/is_sequence.cpp ]
|
||||
[ compile support/pair_deque.cpp ]
|
||||
[ compile support/pair_list.cpp ]
|
||||
[ compile support/pair_map.cpp ]
|
||||
@ -264,6 +266,7 @@ project
|
||||
: [ requires cxx11_variadic_templates ] ]
|
||||
[ compile support/and.cpp
|
||||
: [ requires cxx11_variadic_templates ] ]
|
||||
[ compile support/tag_of.cpp ]
|
||||
|
||||
# [ compile-fail xxx.cpp ]
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
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)
|
||||
==============================================================================*/
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES // $$$ JDG temp $$$
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
#include <boost/fusion/container/deque/deque.hpp>
|
||||
|
||||
#define FUSION_SEQUENCE boost::fusion::deque<std::vector<x>>
|
||||
|
86
test/sequence/github-176.cpp
Normal file
86
test/sequence/github-176.cpp
Normal file
@ -0,0 +1,86 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Kohei Takahashi
|
||||
|
||||
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/fusion/sequence/intrinsic/at.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/at_key.hpp>
|
||||
#include <boost/fusion/container/vector.hpp>
|
||||
#include <boost/fusion/container/list.hpp>
|
||||
#include <boost/fusion/container/deque.hpp>
|
||||
#include <boost/fusion/container/map.hpp>
|
||||
#include <boost/fusion/container/set.hpp>
|
||||
#include <boost/fusion/tuple/tuple.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
|
||||
template <typename Sequence>
|
||||
void test_at()
|
||||
{
|
||||
Sequence seq;
|
||||
|
||||
// zero initialized
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 0);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 0);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 0);
|
||||
|
||||
int (&arr)[3] = boost::fusion::deref(boost::fusion::begin(seq));
|
||||
|
||||
arr[0] = 2;
|
||||
arr[1] = 4;
|
||||
arr[2] = 6;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 4);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6);
|
||||
|
||||
boost::fusion::at_c<0>(seq)[1] = 42;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[1] == 42);
|
||||
BOOST_TEST(boost::fusion::at_c<0>(seq)[2] == 6);
|
||||
}
|
||||
|
||||
template <typename T> inline T& value(T& v) { return v; }
|
||||
template <typename K, typename T> inline T& value(boost::fusion::pair<K, T>& v) { return v.second; }
|
||||
|
||||
template <typename Sequence>
|
||||
void test_at_key()
|
||||
{
|
||||
Sequence seq;
|
||||
|
||||
// zero initialized
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[0] == 0);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[1] == 0);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[2] == 0);
|
||||
|
||||
int (&arr)[3] = value(boost::fusion::deref(boost::fusion::begin(seq)));
|
||||
|
||||
arr[0] = 2;
|
||||
arr[1] = 4;
|
||||
arr[2] = 6;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[1] == 4);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[2] == 6);
|
||||
|
||||
boost::fusion::at_key<int[3]>(seq)[1] = 42;
|
||||
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[0] == 2);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[1] == 42);
|
||||
BOOST_TEST(boost::fusion::at_key<int[3]>(seq)[2] == 6);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace boost::fusion;
|
||||
|
||||
test_at<vector<int[3]> >();
|
||||
test_at<deque<int[3]> >();
|
||||
test_at<list<int[3]> >();
|
||||
test_at<tuple<int[3]> >();
|
||||
|
||||
test_at_key<set<int[3]> >();
|
||||
test_at_key<map<pair<int[3], int[3]> > >();
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
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)
|
||||
==============================================================================*/
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES // $$$ JDG temp $$$
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
#include <boost/fusion/container/map/map.hpp>
|
||||
|
||||
struct k1 {};
|
||||
|
@ -5,7 +5,7 @@
|
||||
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)
|
||||
==============================================================================*/
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES // $$$ JDG temp $$$
|
||||
#define BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
|
||||
#define FUSION_SEQUENCE boost::fusion::vector<std::vector<x>>
|
||||
|
@ -11,24 +11,18 @@
|
||||
# error "does not meet requirements"
|
||||
#endif
|
||||
|
||||
#include <boost/detail/lightweight_test.hpp>
|
||||
#include <boost/fusion/support/detail/and.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/type_traits/integral_constant.hpp>
|
||||
#include <boost/mpl/assert.hpp>
|
||||
|
||||
int main() {
|
||||
using namespace boost;
|
||||
using namespace boost::fusion::detail;
|
||||
|
||||
BOOST_TEST((and_<>::value));
|
||||
BOOST_TEST(!(and_<false_type>::value));
|
||||
BOOST_TEST((and_<true_type>::value));
|
||||
BOOST_TEST(!(and_<true_type, false_type>::value));
|
||||
BOOST_TEST((and_<true_type, true_type>::value));
|
||||
BOOST_TEST(!(and_<true_type, true_type, false_type>::value));
|
||||
BOOST_TEST((and_<true_type, true_type, true_type>::value));
|
||||
BOOST_TEST((and_<true_type, mpl::true_>::value));
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
using namespace boost;
|
||||
using namespace boost::fusion::detail;
|
||||
|
||||
BOOST_MPL_ASSERT((and_<>));
|
||||
BOOST_MPL_ASSERT_NOT((and_<false_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type>));
|
||||
BOOST_MPL_ASSERT_NOT((and_<true_type, false_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type, true_type>));
|
||||
BOOST_MPL_ASSERT_NOT((and_<true_type, true_type, false_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type, true_type, true_type>));
|
||||
BOOST_MPL_ASSERT((and_<true_type, mpl::true_>));
|
||||
|
17
test/support/is_sequence.cpp
Normal file
17
test/support/is_sequence.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Louis Dionne
|
||||
|
||||
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/fusion/support/is_sequence.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
|
||||
// Make sure fusion::is_sequence and fusion::is_native_fusion_sequence can be
|
||||
// used with an incomplete type.
|
||||
struct incomplete;
|
||||
BOOST_STATIC_ASSERT(!boost::fusion::traits::is_sequence<incomplete>::value);
|
||||
BOOST_STATIC_ASSERT(!boost::fusion::traits::is_native_fusion_sequence<incomplete>::value);
|
||||
|
||||
int main() { }
|
17
test/support/tag_of.cpp
Normal file
17
test/support/tag_of.cpp
Normal file
@ -0,0 +1,17 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2018 Louis Dionne
|
||||
|
||||
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/fusion/support/tag_of.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
|
||||
// Make sure tag_of can be used with an incomplete type.
|
||||
struct incomplete;
|
||||
typedef boost::fusion::traits::tag_of<incomplete>::type Tag;
|
||||
BOOST_STATIC_ASSERT((boost::is_same<Tag, boost::fusion::non_fusion_tag>::value));
|
||||
|
||||
int main() { }
|
Reference in New Issue
Block a user