From dbf6e0cf4b68d45cc57ec6be91693e25632a310d Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 2 Mar 2004 13:02:49 +0000 Subject: [PATCH] bind_cv_test.cpp added. [SVN r22418] --- test/Jamfile | 1 + test/Jamfile.v2 | 1 + test/bind_cv_test.cpp | 159 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 test/bind_cv_test.cpp diff --git a/test/Jamfile b/test/Jamfile index 65b0afc..3e4155c 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -20,6 +20,7 @@ DEPENDS all : bind ; : [ run bind_test.cpp ] [ run bind_eq_test.cpp ] [ run bind_const_test.cpp ] + [ run bind_cv_test.cpp ] [ run mem_fn_test.cpp ] [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index a91453c..513e579 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -14,6 +14,7 @@ test-suite "bind" : [ run bind_test.cpp ] [ run bind_eq_test.cpp ] [ run bind_const_test.cpp ] + [ run bind_cv_test.cpp ] [ run mem_fn_test.cpp ] [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] diff --git a/test/bind_cv_test.cpp b/test/bind_cv_test.cpp new file mode 100644 index 0000000..252b7f6 --- /dev/null +++ b/test/bind_cv_test.cpp @@ -0,0 +1,159 @@ +#include + +#if defined(BOOST_MSVC) +#pragma warning(disable: 4786) // identifier truncated in debug info +#pragma warning(disable: 4710) // function not inlined +#pragma warning(disable: 4711) // function selected for automatic inline expansion +#pragma warning(disable: 4514) // unreferenced inline removed +#endif + +// +// bind_cv_test.cpp +// +// Copyright (c) 2004 Peter Dimov +// +// Permission to copy, use, modify, sell and distribute this software +// is granted provided this copyright notice appears in all copies. +// This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. +// + +#include + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(push, 3) +#endif + +#include + +#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) +#pragma warning(pop) +#endif + +#include + +struct X +{ + int operator()() + { + return 17041; + } + + int operator()() const + { + return -17041; + } + + int operator()(int x1) + { + return x1; + } + + int operator()(int x1) const + { + return -x1; + } + + int operator()(int x1, int x2) + { + return x1+x2; + } + + int operator()(int x1, int x2) const + { + return -(x1+x2); + } + + int operator()(int x1, int x2, int x3) + { + return x1+x2+x3; + } + + int operator()(int x1, int x2, int x3) const + { + return -(x1+x2+x3); + } + + int operator()(int x1, int x2, int x3, int x4) + { + return x1+x2+x3+x4; + } + + int operator()(int x1, int x2, int x3, int x4) const + { + return -(x1+x2+x3+x4); + } + + int operator()(int x1, int x2, int x3, int x4, int x5) + { + return x1+x2+x3+x4+x5; + } + + int operator()(int x1, int x2, int x3, int x4, int x5) const + { + return -(x1+x2+x3+x4+x5); + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6) + { + return x1+x2+x3+x4+x5+x6; + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6) const + { + return -(x1+x2+x3+x4+x5+x6); + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6, int x7) + { + return x1+x2+x3+x4+x5+x6+x7; + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6, int x7) const + { + return -(x1+x2+x3+x4+x5+x6+x7); + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8) + { + return x1+x2+x3+x4+x5+x6+x7+x8; + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8) const + { + return -(x1+x2+x3+x4+x5+x6+x7+x8); + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9) + { + return x1+x2+x3+x4+x5+x6+x7+x8+x9; + } + + int operator()(int x1, int x2, int x3, int x4, int x5, int x6, int x7, int x8, int x9) const + { + return -(x1+x2+x3+x4+x5+x6+x7+x8+x9); + } +}; + +template void test(F f, int r) +{ + F const & cf = f; + BOOST_TEST( cf() == -r ); + BOOST_TEST( f() == r ); +} + +int main() +{ + test( boost::bind( X() ), 17041 ); + test( boost::bind( X(), 1 ), 1 ); + test( boost::bind( X(), 1, 2 ), 1+2 ); + test( boost::bind( X(), 1, 2, 3 ), 1+2+3 ); + test( boost::bind( X(), 1, 2, 3, 4 ), 1+2+3+4 ); + test( boost::bind( X(), 1, 2, 3, 4, 5 ), 1+2+3+4+5 ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6 ), 1+2+3+4+5+6 ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6, 7 ), 1+2+3+4+5+6+7 ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6, 7, 8 ), 1+2+3+4+5+6+7+8 ); + test( boost::bind( X(), 1, 2, 3, 4, 5, 6, 7, 8, 9 ), 1+2+3+4+5+6+7+8+9 ); + + return boost::report_errors(); +}