From 8f1bb7f13f32bb53f46422ebe5ffc01dba493f76 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 1 Mar 2004 21:05:02 +0000 Subject: [PATCH] bind_const_test.cpp added. [SVN r22416] --- test/Jamfile | 1 + test/Jamfile.v2 | 1 + test/bind_const_test.cpp | 185 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 test/bind_const_test.cpp diff --git a/test/Jamfile b/test/Jamfile index 31b8b25..65b0afc 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -19,6 +19,7 @@ DEPENDS all : bind ; test-suite "bind" : [ run bind_test.cpp ] [ run bind_eq_test.cpp ] + [ run bind_const_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 650abcc..a91453c 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -13,6 +13,7 @@ import testing ; test-suite "bind" : [ run bind_test.cpp ] [ run bind_eq_test.cpp ] + [ run bind_const_test.cpp ] [ run mem_fn_test.cpp ] [ run mem_fn_void_test.cpp ] [ run mem_fn_derived_test.cpp ] diff --git a/test/bind_const_test.cpp b/test/bind_const_test.cpp new file mode 100644 index 0000000..b100e0c --- /dev/null +++ b/test/bind_const_test.cpp @@ -0,0 +1,185 @@ +#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_const_test.cpp - test const bind objects +// +// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2001 David Abrahams +// +// 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 +#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 + +// + +long f_0() +{ + return 17041L; +} + +long f_1(long a) +{ + return a; +} + +long f_2(long a, long b) +{ + return a + 10 * b; +} + +long f_3(long a, long b, long c) +{ + return a + 10 * b + 100 * c; +} + +long f_4(long a, long b, long c, long d) +{ + return a + 10 * b + 100 * c + 1000 * d; +} + +long f_5(long a, long b, long c, long d, long e) +{ + return a + 10 * b + 100 * c + 1000 * d + 10000 * e; +} + +long f_6(long a, long b, long c, long d, long e, long f) +{ + return a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f; +} + +long f_7(long a, long b, long c, long d, long e, long f, long g) +{ + return a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f + 1000000 * g; +} + +long f_8(long a, long b, long c, long d, long e, long f, long g, long h) +{ + return a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f + 1000000 * g + 10000000 * h; +} + +long f_9(long a, long b, long c, long d, long e, long f, long g, long h, long i) +{ + return a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f + 1000000 * g + 10000000 * h + 100000000 * i; +} + +long global_result; + +void fv_0() +{ + global_result = 17041L; +} + +void fv_1(long a) +{ + global_result = a; +} + +void fv_2(long a, long b) +{ + global_result = a + 10 * b; +} + +void fv_3(long a, long b, long c) +{ + global_result = a + 10 * b + 100 * c; +} + +void fv_4(long a, long b, long c, long d) +{ + global_result = a + 10 * b + 100 * c + 1000 * d; +} + +void fv_5(long a, long b, long c, long d, long e) +{ + global_result = a + 10 * b + 100 * c + 1000 * d + 10000 * e; +} + +void fv_6(long a, long b, long c, long d, long e, long f) +{ + global_result = a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f; +} + +void fv_7(long a, long b, long c, long d, long e, long f, long g) +{ + global_result = a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f + 1000000 * g; +} + +void fv_8(long a, long b, long c, long d, long e, long f, long g, long h) +{ + global_result = a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f + 1000000 * g + 10000000 * h; +} + +void fv_9(long a, long b, long c, long d, long e, long f, long g, long h, long i) +{ + global_result = a + 10 * b + 100 * c + 1000 * d + 10000 * e + 100000 * f + 1000000 * g + 10000000 * h + 100000000 * i; +} + +template long test(F const & f, A const & a) +{ + return f(a); +} + +template long testv(F const & f, A const & a) +{ + f(a); + return global_result; +} + +void function_test() +{ + using namespace boost; + + int const i = 1; + + BOOST_TEST( test( bind(f_0), i ) == 17041L ); + BOOST_TEST( test( bind(f_1, _1), i ) == 1L ); + BOOST_TEST( test( bind(f_2, _1, 2), i ) == 21L ); + BOOST_TEST( test( bind(f_3, _1, 2, 3), i ) == 321L ); + BOOST_TEST( test( bind(f_4, _1, 2, 3, 4), i ) == 4321L ); + BOOST_TEST( test( bind(f_5, _1, 2, 3, 4, 5), i ) == 54321L ); + BOOST_TEST( test( bind(f_6, _1, 2, 3, 4, 5, 6), i ) == 654321L ); + BOOST_TEST( test( bind(f_7, _1, 2, 3, 4, 5, 6, 7), i ) == 7654321L ); + BOOST_TEST( test( bind(f_8, _1, 2, 3, 4, 5, 6, 7, 8), i ) == 87654321L ); + BOOST_TEST( test( bind(f_9, _1, 2, 3, 4, 5, 6, 7, 8, 9), i ) == 987654321L ); + + BOOST_TEST( testv( bind(fv_0), i ) == 17041L ); + BOOST_TEST( testv( bind(fv_1, _1), i ) == 1L ); + BOOST_TEST( testv( bind(fv_2, _1, 2), i ) == 21L ); + BOOST_TEST( testv( bind(fv_3, _1, 2, 3), i ) == 321L ); + BOOST_TEST( testv( bind(fv_4, _1, 2, 3, 4), i ) == 4321L ); + BOOST_TEST( testv( bind(fv_5, _1, 2, 3, 4, 5), i ) == 54321L ); + BOOST_TEST( testv( bind(fv_6, _1, 2, 3, 4, 5, 6), i ) == 654321L ); + BOOST_TEST( testv( bind(fv_7, _1, 2, 3, 4, 5, 6, 7), i ) == 7654321L ); + BOOST_TEST( testv( bind(fv_8, _1, 2, 3, 4, 5, 6, 7, 8), i ) == 87654321L ); + BOOST_TEST( testv( bind(fv_9, _1, 2, 3, 4, 5, 6, 7, 8, 9), i ) == 987654321L ); +} + +int main() +{ + function_test(); + return boost::report_errors(); +}