|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r85668 - in branches/release/libs/fusion: . doc test/sequence
From: joel_at_[hidden]
Date: 2013-09-15 02:16:40
Author: djowel
Date: 2013-09-15 02:16:39 EDT (Sun, 15 Sep 2013)
New Revision: 85668
URL: http://svn.boost.org/trac/boost/changeset/85668
Log:
big merge from trunk
Added:
branches/release/libs/fusion/test/sequence/define_struct_inline.cpp (contents, props changed)
branches/release/libs/fusion/test/sequence/define_tpl_struct_inline.cpp (contents, props changed)
Properties modified:
branches/release/libs/fusion/ (props changed)
Text files modified:
branches/release/libs/fusion/doc/iterator.qbk | 2
branches/release/libs/fusion/test/sequence/define_struct_inline.cpp | 134 +++++++++++++++++++++++++++++++++++++++
branches/release/libs/fusion/test/sequence/define_tpl_struct_inline.cpp | 137 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 272 insertions(+), 1 deletions(-)
Modified: branches/release/libs/fusion/doc/iterator.qbk
==============================================================================
--- branches/release/libs/fusion/doc/iterator.qbk Sat Sep 14 12:07:45 2013 (r85667)
+++ branches/release/libs/fusion/doc/iterator.qbk 2013-09-15 02:16:39 EDT (Sun, 15 Sep 2013) (r85668)
@@ -492,7 +492,7 @@
template<
typename I
>
- typename __result_of_deref_data__<I>::type deref(I const& i);
+ typename __result_of_deref_data__<I>::type deref_data(I const& i);
[table Parameters
[[Parameter] [Requirement] [Description]]
Added: branches/release/libs/fusion/test/sequence/define_struct_inline.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/release/libs/fusion/test/sequence/define_struct_inline.cpp 2013-09-15 02:16:39 EDT (Sun, 15 Sep 2013) (r85668)
@@ -0,0 +1,134 @@
+/*=============================================================================
+ Copyright (c) 2010, 2012 Christopher Schmidt, Nathan Ridge
+
+ Distributed under the Boost Software Liceclse, Version 1.0. (See accompanying
+ file LICEclsE_1_0.txt or copy at http://www.boost.org/LICEclsE_1_0.txt)
+==============================================================================*/
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/fusion/sequence/io/out.hpp>
+#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <iostream>
+#include <string>
+
+struct cls
+{
+ BOOST_FUSION_DEFINE_STRUCT_INLINE(
+ point,
+ (int, x)
+ (int, y)
+ )
+};
+
+template <typename = int>
+struct tpl_cls
+{
+ BOOST_FUSION_DEFINE_STRUCT_INLINE(
+ point,
+ (int, x)
+ (int, y)
+ )
+};
+
+namespace ns
+{
+ BOOST_FUSION_DEFINE_STRUCT_INLINE(s, (int, m))
+
+ BOOST_FUSION_DEFINE_STRUCT_INLINE(empty_struct, )
+}
+
+template <typename Point>
+void run_test()
+{
+ using namespace boost::fusion;
+
+ std::cout << tuple_open('[');
+ std::cout << tuple_close(']');
+ std::cout << tuple_delimiter(", ");
+
+ {
+ BOOST_STATIC_ASSERT(boost::fusion::result_of::size<ns::empty_struct>::value == 0);
+ BOOST_STATIC_ASSERT(boost::fusion::result_of::empty<ns::empty_struct>::value);
+ }
+
+ {
+ BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
+ 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<Point>::value == 2);
+ BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty<Point>::value);
+
+ BOOST_TEST(front(p) == 6);
+ BOOST_TEST(back(p) == 9);
+ }
+
+ {
+ vector<int, float> v1(4, 2);
+ Point v2(5, 3);
+ vector<long, double> 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 Point to vector
+ Point p(5, 3);
+ vector<int, long> v(p);
+ v = p;
+ }
+
+ {
+ // conversion from Point to list
+ Point p(5, 3);
+ list<int, long> l(p);
+ l = p;
+ }
+
+ { // begin/end
+ using namespace boost::fusion;
+
+ typedef boost::fusion::result_of::begin<ns::s>::type b;
+ typedef boost::fusion::result_of::end<ns::s>::type e;
+ // this fails
+ BOOST_MPL_ASSERT((boost::is_same<boost::fusion::result_of::next<b>::type, e>));
+ }
+
+ {
+ Point p = make_list(5,3);
+ BOOST_TEST(p == make_vector(5,3));
+
+ p = make_list(3,5);
+ BOOST_TEST(p == make_vector(3,5));
+ }
+}
+
+int
+main()
+{
+ run_test<cls::point>(); // test with non-template enclosing class
+ run_test<tpl_cls<>::point>(); // test with template enclosing class
+ return boost::report_errors();
+
+}
+
Added: branches/release/libs/fusion/test/sequence/define_tpl_struct_inline.cpp
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/release/libs/fusion/test/sequence/define_tpl_struct_inline.cpp 2013-09-15 02:16:39 EDT (Sun, 15 Sep 2013) (r85668)
@@ -0,0 +1,137 @@
+/*=============================================================================
+ Copyright (c) 2010, 2012 Christopher Schmidt, nathan Ridge
+
+ 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/detail/lightweight_test.hpp>
+#include <boost/fusion/sequence.hpp>
+#include <boost/fusion/container.hpp>
+#include <boost/fusion/support.hpp>
+#include <boost/fusion/sequence/io/out.hpp>
+#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
+#include <boost/preprocessor/empty.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/static_assert.hpp>
+#include <iostream>
+#include <string>
+
+struct cls
+{
+ BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE(
+ (X)(Y),
+ point,
+ (X, x)
+ (Y, y)
+ )
+};
+
+template <typename = int>
+struct tpl_cls
+{
+ BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE(
+ (X)(Y),
+ point,
+ (X, x)
+ (Y, y)
+ )
+};
+
+namespace ns
+{
+ BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), s, (M, m))
+
+ BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE((M), empty_struct, )
+}
+
+template <typename Point>
+void run_test()
+{
+ using namespace boost::fusion;
+
+ std::cout << tuple_open('[');
+ std::cout << tuple_close(']');
+ std::cout << tuple_delimiter(", ");
+
+ {
+ BOOST_STATIC_ASSERT(boost::fusion::result_of::size<ns::empty_struct<int> >::value == 0);
+ BOOST_STATIC_ASSERT(boost::fusion::result_of::empty<ns::empty_struct<int> >::value);
+ }
+
+ {
+ BOOST_MPL_ASSERT_NOT((traits::is_view<Point>));
+ 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<Point>::value == 2);
+ BOOST_STATIC_ASSERT(!boost::fusion::result_of::empty<Point>::value);
+
+ BOOST_TEST(front(p) == 6);
+ BOOST_TEST(back(p) == 9);
+ }
+
+ {
+ vector<int, float> v1(4, 2);
+ Point v2(5, 3);
+ vector<long, double> 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 Point to vector
+ Point p(5, 3);
+ vector<int, long> v(p);
+ v = p;
+ }
+
+ {
+ // conversion from Point to list
+ Point p(5, 3);
+ list<int, long> l(p);
+ l = p;
+ }
+
+ { // begin/end
+ using namespace boost::fusion;
+
+ typedef boost::fusion::result_of::begin<ns::s<int> >::type b;
+ typedef boost::fusion::result_of::end<ns::s<int> >::type e;
+ // this fails
+ BOOST_MPL_ASSERT((boost::is_same<boost::fusion::result_of::next<b>::type, e>));
+ }
+
+
+ {
+ Point p = make_list(5,3);
+ BOOST_TEST(p == make_vector(5,3));
+
+ p = make_list(3,5);
+ BOOST_TEST(p == make_vector(3,5));
+ }
+}
+
+int
+main()
+{
+ run_test<cls::point<int, int> >(); // test non-template enclosing class
+ run_test<tpl_cls<>::point<int, int> >(); // test template enclosing class
+
+ return boost::report_errors();
+}
+
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk