////////////////////////////////////////////////////////////////// // // lazy_ptr_tests.cpp // // Tests for ptr_to_fun, ptr_to_fun0 and ptr_to_mem_fun. // // /*============================================================================= Copyright (c) 2000-2003 Brian McNamara and Yannis Smaragdakis Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2015 John Fletcher 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 using namespace boost::phoenix; using std::cout; using std::endl; namespace example { int footle() { return 0; } int foobar(int x) { return 2*x; } int foxy(int x,int y) { return x*y; } int foxyz(int x,int y,int z) { return x*y + z; } int fwxyz(int w,int x,int y,int z) { return w + x*y + z; } } struct O { int aa; O( int a ) : aa(a) {} int cf( int x ) const { return x+1; } int f( int x ) { return ++aa + x; } int a() const { return aa; } }; int main() { using boost::phoenix::arg_names::arg1; using boost::phoenix::arg_names::arg2; using boost::phoenix::arg_names::arg3; using boost::phoenix::arg_names::arg4; BOOST_TEST( ptr_to_fun0(&example::footle)()() == 0 ); BOOST_TEST( ptr_to_fun(&example::foobar)(arg1)(1) == 2 ); BOOST_TEST( ptr_to_fun(&example::foxy)(arg1,arg2)(2,3) == 6 ); BOOST_TEST( ptr_to_fun(&example::foxyz)(arg1,arg2,arg3)(2,3,4) == 10 ); BOOST_TEST( ptr_to_fun(&example::fwxyz)(arg1,arg2,arg3,arg4)(1,2,3,4) == 11); O o(1); BOOST_TEST( ptr_to_mem_fun( &O::a )( &o )() == 1 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( &o, 1 )() == 2 ); BOOST_TEST( ptr_to_mem_fun( &O::f )( &o, 1 )() == 3 ); BOOST_TEST( ptr_to_mem_fun( &O::f )( &o, 1 )() == 4 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( &o, 1 )() == 2 ); O oo(1); BOOST_TEST( ptr_to_mem_fun( &O::a )( arg1 )( &oo ) == 1 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( &oo, arg1 )(1) == 2 ); BOOST_TEST( ptr_to_mem_fun( &O::f )( &oo, arg1 )(1) == 3 ); BOOST_TEST( ptr_to_mem_fun( &O::f )( &oo, arg1 )(1) == 4 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( &oo, arg1 )(1) == 2 ); const O p(1); BOOST_TEST( ptr_to_mem_fun( &O::a )( &p )() == 1 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( &p, 1 )() == 2 ); boost::shared_ptr r( new O(3) ); BOOST_TEST( ptr_to_mem_fun( &O::a )( r )() == 3 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( r, 1 )() == 2 ); BOOST_TEST( ptr_to_mem_fun( &O::f )( r, 1 )() == 5 ); BOOST_TEST( ptr_to_mem_fun( &O::f )( r, 1 )() == 6 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( r, 1 )() == 2 ); boost::shared_ptr s( new O(3) ); BOOST_TEST( ptr_to_mem_fun( &O::a )( s )() == 3 ); BOOST_TEST( ptr_to_mem_fun( &O::cf )( s, 1 )() == 2 ); return boost::report_errors(); }