diff --git a/test/sequence/adapt_struct.cpp b/test/sequence/adapt_struct.cpp index bb8c7cb3..819ec009 100644 --- a/test/sequence/adapt_struct.cpp +++ b/test/sequence/adapt_struct.cpp @@ -4,8 +4,6 @@ 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_PP_VARIADICS 1 - #include #include #include @@ -51,32 +49,59 @@ namespace ns private: int x; int y; + int z; public: - point_with_private_attributes(int x, int y):x(x),y(y) + point_with_private_attributes(int x, int y, int z):x(x),y(y),z(z) {} }; #endif } -BOOST_FUSION_ADAPT_STRUCT( - ns::point, - (int, x) - (BOOST_FUSION_ADAPT_AUTO, y) - (, z) -) +#if BOOST_PP_VARIADICS + + BOOST_FUSION_ADAPT_STRUCT( + ns::point, + x, + y, + z + ) + +# if !BOOST_WORKAROUND(__GNUC__,<4) + BOOST_FUSION_ADAPT_STRUCT( + ns::point_with_private_attributes, + x, + y, + z + ) +# endif + + struct s { int m; }; + BOOST_FUSION_ADAPT_STRUCT(s, m) + +#else // BOOST_PP_VARIADICS + + BOOST_FUSION_ADAPT_STRUCT( + ns::point, + (int, x) + (int, y) + (BOOST_FUSION_ADAPT_AUTO, z) + ) + +# if !BOOST_WORKAROUND(__GNUC__,<4) + BOOST_FUSION_ADAPT_STRUCT( + ns::point_with_private_attributes, + (int, x) + (int, y) + (BOOST_FUSION_ADAPT_AUTO, z) + ) +# endif + + struct s { int m; }; + BOOST_FUSION_ADAPT_STRUCT(s, (BOOST_FUSION_ADAPT_AUTO, m)) -#if !BOOST_WORKAROUND(__GNUC__,<4) -BOOST_FUSION_ADAPT_STRUCT( - ns::point_with_private_attributes, - (int, x) - (int, y) -) #endif -struct s { int m; }; -BOOST_FUSION_ADAPT_STRUCT(s, (int, m)) - int main() { @@ -88,29 +113,31 @@ main() std::cout << tuple_delimiter(", "); { - BOOST_MPL_ASSERT_NOT((traits::is_view)); - ns::point p = {123, 456}; + BOOST_MPL_ASSERT_NOT((traits::is_view)); + point p = {123, 456, 789}; std::cout << at_c<0>(p) << std::endl; std::cout << at_c<1>(p) << std::endl; + std::cout << at_c<2>(p) << std::endl; std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456, 4)); + BOOST_TEST(p == make_vector(123, 456, 789)); at_c<0>(p) = 6; at_c<1>(p) = 9; + at_c<2>(p) = 12; BOOST_TEST(p == make_vector(6, 9, 12)); - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 3); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); + BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 3); + BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); BOOST_TEST(front(p) == 6); - BOOST_TEST(back(p) == 9); + BOOST_TEST(back(p) == 12); } { - fusion::vector v1(4, 2, 3); - ns::point v2 = {5, 3, 2}; - fusion::vector v3(5, 4, 2); + vector v1(4, 2, 2); + point v2 = {5, 3, 3}; + vector v3(5, 4, 4); BOOST_TEST(v1 < v2); BOOST_TEST(v1 <= v2); BOOST_TEST(v2 > v1); @@ -122,16 +149,16 @@ main() } { - // conversion from ns::point to vector - ns::point p = {5, 3, 4}; - fusion::vector v(p); + // conversion from point to vector + point p = {5, 3, 3}; + vector v(p); v = p; } { - // conversion from ns::point to list - ns::point p = {5, 3, 4}; - fusion::list l(p); + // conversion from point to list + point p = {5, 3, 3}; + list l(p); l = p; } @@ -154,12 +181,13 @@ main() #if !BOOST_WORKAROUND(__GNUC__,<4) { - ns::point_with_private_attributes p(123, 456); + ns::point_with_private_attributes p(123, 456, 789); std::cout << at_c<0>(p) << std::endl; std::cout << at_c<1>(p) << std::endl; + std::cout << at_c<2>(p) << std::endl; std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); + BOOST_TEST(p == make_vector(123, 456, 789)); } #endif diff --git a/test/sequence/adapt_tpl_struct.cpp b/test/sequence/adapt_tpl_struct.cpp index 1c0ae6d6..86face6d 100644 --- a/test/sequence/adapt_tpl_struct.cpp +++ b/test/sequence/adapt_tpl_struct.cpp @@ -35,19 +35,40 @@ namespace ns { X x; Y y; + int z; }; } -BOOST_FUSION_ADAPT_TPL_STRUCT( - (X)(Y), - (ns::point)(X)(Y), - (BOOST_FUSION_ADAPT_AUTO, x) - (Y, y) -) +#if BOOST_PP_VARIADICS + + BOOST_FUSION_ADAPT_TPL_STRUCT( + (X)(Y), + (ns::point)(X)(Y), + x, + (BOOST_FUSION_ADAPT_AUTO, y) + (int, z) + ) + + template + struct s { M m; }; + BOOST_FUSION_ADAPT_TPL_STRUCT((M), (s)(M), m) + +#else // BOOST_PP_VARIADICS + + BOOST_FUSION_ADAPT_TPL_STRUCT( + (X)(Y), + (ns::point)(X)(Y), + (X, x) + (Y, y) + (BOOST_FUSION_ADAPT_AUTO, z) + ) + + template + struct s { M m; }; + BOOST_FUSION_ADAPT_TPL_STRUCT((M), (s)(M), (BOOST_FUSION_ADAPT_AUTO, m)) + +#endif -template -struct s { M m; }; -BOOST_FUSION_ADAPT_TPL_STRUCT((M), (s)(M), (M, m)) int main() @@ -62,28 +83,30 @@ main() { BOOST_MPL_ASSERT_NOT((traits::is_view)); - point p = {123, 456}; + point p = {123, 456, 789}; std::cout << at_c<0>(p) << std::endl; std::cout << at_c<1>(p) << std::endl; + std::cout << at_c<2>(p) << std::endl; std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); + BOOST_TEST(p == make_vector(123, 456, 789)); at_c<0>(p) = 6; at_c<1>(p) = 9; - BOOST_TEST(p == make_vector(6, 9)); + at_c<2>(p) = 12; + BOOST_TEST(p == make_vector(6, 9, 12)); - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); + BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 3); BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); BOOST_TEST(front(p) == 6); - BOOST_TEST(back(p) == 9); + BOOST_TEST(back(p) == 12); } { - vector v1(4, 2); - point v2 = {5, 3}; - vector v3(5, 4); + vector v1(4, 2, 2); + point v2 = {5, 3, 3}; + vector v3(5, 4, 4); BOOST_TEST(v1 < v2); BOOST_TEST(v1 <= v2); BOOST_TEST(v2 > v1); @@ -96,14 +119,14 @@ main() { // conversion from point to vector - point p = {5, 3}; - vector v(p); + point p = {5, 3, 3}; + vector v(p); v = p; } { // conversion from point to list - point p = {5, 3}; + point p = {5, 3, 3}; list l(p); l = p; } diff --git a/test/sequence/auto_adapt_assoc_struct.cpp b/test/sequence/auto_adapt_assoc_struct.cpp deleted file mode 100644 index 177df20b..00000000 --- a/test/sequence/auto_adapt_assoc_struct.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2007 Joel de Guzman - Copyright (c) 2005-2007 Dan Marsden - - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ns -{ - struct x_member; - struct y_member; - struct z_member; - - struct point - { - int x; - int y; - }; -} - -BOOST_FUSION_AUTO_ADAPT_ASSOC_STRUCT( - ns::point, - (x, ns::x_member) - (y, ns::y_member) -) - -int -main() -{ - using namespace boost::fusion; - using namespace boost; - - std::cout << tuple_open('['); - std::cout << tuple_close(']'); - std::cout << tuple_delimiter(", "); - - { - BOOST_MPL_ASSERT_NOT((traits::is_view)); - ns::point p = {123, 456}; - - std::cout << at_c<0>(p) << std::endl; - std::cout << at_c<1>(p) << std::endl; - std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); - - at_c<0>(p) = 6; - at_c<1>(p) = 9; - BOOST_TEST(p == make_vector(6, 9)); - - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); - - BOOST_TEST(front(p) == 6); - BOOST_TEST(back(p) == 9); - } - - { - fusion::vector v1(4, 2); - ns::point v2 = {5, 3}; - fusion::vector v3(5, 4); - BOOST_TEST(v1 < v2); - BOOST_TEST(v1 <= v2); - BOOST_TEST(v2 > v1); - BOOST_TEST(v2 >= v1); - BOOST_TEST(v2 < v3); - BOOST_TEST(v2 <= v3); - BOOST_TEST(v3 > v2); - BOOST_TEST(v3 >= v2); - } - - { - // conversion from ns::point to vector - ns::point p = {5, 3}; - fusion::vector v(p); - v = p; - } - - { - // conversion from ns::point to list - ns::point p = {5, 3}; - fusion::list l(p); - l = p; - } - - { - // assoc stuff - BOOST_MPL_ASSERT((boost::fusion::result_of::has_key)); - BOOST_MPL_ASSERT((boost::fusion::result_of::has_key)); - BOOST_MPL_ASSERT((mpl::not_ >)); - - BOOST_MPL_ASSERT((boost::is_same::type, int>)); - BOOST_MPL_ASSERT((boost::is_same::type, int>)); - - ns::point p = {5, 3}; - - BOOST_TEST(at_key(p) == 5); - BOOST_TEST(at_key(p) == 3); - } - - { - BOOST_MPL_ASSERT((mpl::is_sequence)); - BOOST_MPL_ASSERT((boost::is_same< - boost::fusion::result_of::value_at_c::type - , mpl::front::type>)); - } - - return boost::report_errors(); -} - diff --git a/test/sequence/auto_adapt_assoc_struct_named.cpp b/test/sequence/auto_adapt_assoc_struct_named.cpp deleted file mode 100644 index b2e85541..00000000 --- a/test/sequence/auto_adapt_assoc_struct_named.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/*============================================================================= - Copyright (c) 2010 Christopher Schmidt - - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ns -{ - struct x_member; - struct y_member; - struct z_member; - - struct point - { - int x; - int y; - }; -} - -BOOST_FUSION_AUTO_ADAPT_ASSOC_STRUCT_NAMED( - ns::point, - point, - (x, ns::x_member) - (y, ns::y_member) -) - -int -main() -{ - using namespace boost::fusion; - - std::cout << tuple_open('['); - std::cout << tuple_close(']'); - std::cout << tuple_delimiter(", "); - - { - BOOST_MPL_ASSERT((traits::is_view)); - ns::point basep = {123, 456}; - adapted::point p(basep); - - std::cout << at_c<0>(p) << std::endl; - std::cout << at_c<1>(p) << std::endl; - std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); - - at_c<0>(p) = 6; - at_c<1>(p) = 9; - BOOST_TEST(p == make_vector(6, 9)); - - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); - - BOOST_TEST(front(p) == 6); - BOOST_TEST(back(p) == 9); - } - - { - vector v1(4, 2); - ns::point basev2 = {5, 3}; - adapted::point v2(basev2); - - vector v3(5, 4); - BOOST_TEST(v1 < v2); - BOOST_TEST(v1 <= v2); - BOOST_TEST(v2 > v1); - BOOST_TEST(v2 >= v1); - BOOST_TEST(v2 < v3); - BOOST_TEST(v2 <= v3); - BOOST_TEST(v3 > v2); - BOOST_TEST(v3 >= v2); - } - - { - // conversion from adapted::point to vector - ns::point basep = {5, 3}; - adapted::point p(basep); - vector v(p); - v = p; - } - - { - // conversion from adapted::point to list - ns::point basep = {5, 3}; - adapted::point p(basep); - list l(p); - l = p; - } - - { - // assoc stuff - BOOST_MPL_ASSERT((boost::fusion::result_of::has_key)); - BOOST_MPL_ASSERT((boost::fusion::result_of::has_key)); - BOOST_MPL_ASSERT((boost::mpl::not_ >)); - - BOOST_MPL_ASSERT((boost::is_same::type, int>)); - BOOST_MPL_ASSERT((boost::is_same::type, int>)); - - ns::point basep = {5, 3}; - adapted::point p(basep); - - BOOST_TEST(at_key(p) == 5); - BOOST_TEST(at_key(p) == 3); - } - - return boost::report_errors(); -} - diff --git a/test/sequence/auto_adapt_struct.cpp b/test/sequence/auto_adapt_struct.cpp deleted file mode 100644 index e7ce2890..00000000 --- a/test/sequence/auto_adapt_struct.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2007 Joel de Guzman - Copyright (c) 2013-2014 Damien Buhl - - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ns -{ - struct point - { - int x; - int y; - }; - -#if !BOOST_WORKAROUND(__GNUC__,<4) - struct point_with_private_attributes - { - friend struct boost::fusion::extension::access; - - private: - int x; - int y; - - public: - point_with_private_attributes(int x, int y):x(x),y(y) - {} - }; -#endif -} - -/*BOOST_FUSION_AUTO_ADAPT_STRUCT( - ns::point, - (x) - (y) -)*/ - -BOOST_FUSION_AUTO_ADAPT_STRUCT( - ns::point, - x, y -) - -#if !BOOST_WORKAROUND(__GNUC__,<4) -BOOST_FUSION_AUTO_ADAPT_STRUCT( - ns::point_with_private_attributes, - (x) - (y) -) -#endif - -struct s { int m; }; -BOOST_FUSION_AUTO_ADAPT_STRUCT(s, (m)) - -int -main() -{ - using namespace boost::fusion; - using namespace boost; - - std::cout << tuple_open('['); - std::cout << tuple_close(']'); - std::cout << tuple_delimiter(", "); - - { - BOOST_MPL_ASSERT_NOT((traits::is_view)); - ns::point p = {123, 456}; - - std::cout << at_c<0>(p) << std::endl; - std::cout << at_c<1>(p) << std::endl; - std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); - - at_c<0>(p) = 6; - at_c<1>(p) = 9; - BOOST_TEST(p == make_vector(6, 9)); - - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); - - BOOST_TEST(front(p) == 6); - BOOST_TEST(back(p) == 9); - } - - { - fusion::vector v1(4, 2); - ns::point v2 = {5, 3}; - fusion::vector v3(5, 4); - BOOST_TEST(v1 < v2); - BOOST_TEST(v1 <= v2); - BOOST_TEST(v2 > v1); - BOOST_TEST(v2 >= v1); - BOOST_TEST(v2 < v3); - BOOST_TEST(v2 <= v3); - BOOST_TEST(v3 > v2); - BOOST_TEST(v3 >= v2); - } - - { - // conversion from ns::point to vector - ns::point p = {5, 3}; - fusion::vector v(p); - v = p; - } - - { - // conversion from ns::point to list - ns::point p = {5, 3}; - fusion::list l(p); - l = p; - } - - { // begin/end - using namespace boost::fusion; - using boost::is_same; - - typedef boost::fusion::result_of::begin::type b; - typedef boost::fusion::result_of::end::type e; - // this fails - BOOST_MPL_ASSERT((is_same::type, e>)); - } - - { - BOOST_MPL_ASSERT((mpl::is_sequence)); - BOOST_MPL_ASSERT((boost::is_same< - boost::fusion::result_of::value_at_c::type - , mpl::front::type>)); - } - -#if !BOOST_WORKAROUND(__GNUC__,<4) - { - ns::point_with_private_attributes p(123, 456); - - std::cout << at_c<0>(p) << std::endl; - std::cout << at_c<1>(p) << std::endl; - std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); - } -#endif - - return boost::report_errors(); -} diff --git a/test/sequence/auto_adapt_struct_named.cpp b/test/sequence/auto_adapt_struct_named.cpp deleted file mode 100644 index 1ada8efe..00000000 --- a/test/sequence/auto_adapt_struct_named.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/*============================================================================= - Copyright (c) 2001-2007 Joel de Guzman - - 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ns -{ - struct point - { - int x; - int y; - }; -} - -// this creates a fusion view: boost::fusion::adapted::point -BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED( - ns::point, point, - (x) - (y) -) - -// this creates a fusion view: ns1::s1 -struct s { int m; }; -BOOST_FUSION_AUTO_ADAPT_STRUCT_NAMED_NS(s, (ns1), s1, (m)) - -int -main() -{ - using namespace boost::fusion; - using namespace boost; - - std::cout << tuple_open('['); - std::cout << tuple_close(']'); - std::cout << tuple_delimiter(", "); - - { - BOOST_MPL_ASSERT((traits::is_view)); - ns::point basep = {123, 456}; - adapted::point p(basep); - - std::cout << at_c<0>(p) << std::endl; - std::cout << at_c<1>(p) << std::endl; - std::cout << p << std::endl; - BOOST_TEST(p == make_vector(123, 456)); - - at_c<0>(p) = 6; - at_c<1>(p) = 9; - BOOST_TEST(p == make_vector(6, 9)); - - BOOST_STATIC_ASSERT(boost::fusion::result_of::size::value == 2); - BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty::value); - - BOOST_TEST(front(p) == 6); - BOOST_TEST(back(p) == 9); - } - - { - fusion::vector v1(4, 2); - ns::point p = {5, 3}; - adapted::point v2(p); - - fusion::vector v3(5, 4); - BOOST_TEST(v1 < v2); - BOOST_TEST(v1 <= v2); - BOOST_TEST(v2 > v1); - BOOST_TEST(v2 >= v1); - BOOST_TEST(v2 < v3); - BOOST_TEST(v2 <= v3); - BOOST_TEST(v3 > v2); - BOOST_TEST(v3 >= v2); - } - - { - // conversion from adapted::point to vector - ns::point basep = {5, 3}; - adapted::point p(basep); - fusion::vector v(p); - v = p; - } - - { - // conversion from adapted::point to list - ns::point basep = {5, 3}; - adapted::point p(basep); - fusion::list l(p); - l = p; - } - - { // begin/end - using namespace boost::fusion; - using boost::is_same; - - typedef boost::fusion::result_of::begin::type b; - typedef boost::fusion::result_of::end::type e; - // this fails - BOOST_MPL_ASSERT((is_same::type, e>)); - } - - - { - BOOST_MPL_ASSERT((mpl::is_sequence)); - BOOST_MPL_ASSERT((boost::is_same< - boost::fusion::result_of::value_at_c::type - , mpl::front::type>)); - } - - return boost::report_errors(); -} -