]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/phoenix/test/bll_compatibility/bind_tests_simple.cpp
1 // bind_tests_simple.cpp -- The Boost Lambda Library ------------------
3 // Copyright (C) 2000-2003 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4 // Copyright (C) 2000-2003 Gary Powell (powellg@amazon.com)
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
10 // For more information, see www.boost.org
12 // -----------------------------------------------------------------------
15 #include <boost/test/minimal.hpp> // see "Header Implementation Option"
17 #include "boost/lambda/bind.hpp"
21 using namespace boost::lambda
;
24 int sum_of_args_0() { return 0; }
25 int sum_of_args_1(int a
) { return a
; }
26 int sum_of_args_2(int a
, int b
) { return a
+b
; }
27 int sum_of_args_3(int a
, int b
, int c
) { return a
+b
+c
; }
28 int sum_of_args_4(int a
, int b
, int c
, int d
) { return a
+b
+c
+d
; }
29 int sum_of_args_5(int a
, int b
, int c
, int d
, int e
) { return a
+b
+c
+d
+e
; }
30 int sum_of_args_6(int a
, int b
, int c
, int d
, int e
, int f
) { return a
+b
+c
+d
+e
+f
; }
31 int sum_of_args_7(int a
, int b
, int c
, int d
, int e
, int f
, int g
) { return a
+b
+c
+d
+e
+f
+g
; }
32 int sum_of_args_8(int a
, int b
, int c
, int d
, int e
, int f
, int g
, int h
) { return a
+b
+c
+d
+e
+f
+g
+h
; }
33 int sum_of_args_9(int a
, int b
, int c
, int d
, int e
, int f
, int g
, int h
, int i
) { return a
+b
+c
+d
+e
+f
+g
+h
+i
; }
36 // ----------------------------
42 int add(const int& j
) { return i
+ j
; }
43 int add2(int a1
, int a2
) { return i
+ a1
+ a2
; }
44 int add3(int a1
, int a2
, int a3
) { return i
+ a1
+ a2
+ a3
; }
45 int add4(int a1
, int a2
, int a3
, int a4
) { return i
+ a1
+ a2
+ a3
+ a4
; }
46 int add5(int a1
, int a2
, int a3
, int a4
, int a5
)
47 { return i
+ a1
+ a2
+ a3
+ a4
+ a5
; }
48 int add6(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
)
49 { return i
+ a1
+ a2
+ a3
+ a4
+ a5
+ a6
; }
50 int add7(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
, int a7
)
51 { return i
+ a1
+ a2
+ a3
+ a4
+ a5
+ a6
+ a7
; }
52 int add8(int a1
, int a2
, int a3
, int a4
, int a5
, int a6
, int a7
, int a8
)
53 { return i
+ a1
+ a2
+ a3
+ a4
+ a5
+ a6
+ a7
+ a8
; }
57 void test_member_functions()
66 BOOST_CHECK(bind(&A::add
, ref(a
), _1
)(i
) == 11);
67 BOOST_CHECK(bind(&A::add
, &a
, _1
)(i
) == 11);
68 BOOST_CHECK(bind(&A::add
, _1
, 1)(a
) == 11);
69 BOOST_CHECK(bind(&A::add
, _1
, 1)(make_const(&a
)) == 11);
71 BOOST_CHECK(bind(&A::add2
, _1
, 1, 1)(a
) == 12);
72 BOOST_CHECK(bind(&A::add3
, _1
, 1, 1, 1)(a
) == 13);
73 BOOST_CHECK(bind(&A::add4
, _1
, 1, 1, 1, 1)(a
) == 14);
74 BOOST_CHECK(bind(&A::add5
, _1
, 1, 1, 1, 1, 1)(a
) == 15);
75 BOOST_CHECK(bind(&A::add6
, _1
, 1, 1, 1, 1, 1, 1)(a
) == 16);
76 BOOST_CHECK(bind(&A::add7
, _1
, 1, 1, 1, 1, 1, 1, 1)(a
) == 17);
77 BOOST_CHECK(bind(&A::add8
, _1
, 1, 1, 1, 1, 1, 1, 1, 1)(a
) == 18);
79 // This should fail, as lambda functors store arguments as const
80 // bind(&A::add, a, _1);
83 int test_main(int, char *[]) {
85 int i
= 1; int j
= 2; int k
= 3;
88 // bind all parameters
89 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
90 BOOST_CHECK(bind(&sum_of_args_1
, 1)()==1);
91 BOOST_CHECK(bind(&sum_of_args_2
, 1, 2)()==3);
92 BOOST_CHECK(bind(&sum_of_args_3
, 1, 2, 3)()==6);
93 BOOST_CHECK(bind(&sum_of_args_4
, 1, 2, 3, 4)()==10);
94 BOOST_CHECK(bind(&sum_of_args_5
, 1, 2, 3, 4, 5)()==15);
95 BOOST_CHECK(bind(&sum_of_args_6
, 1, 2, 3, 4, 5, 6)()==21);
96 BOOST_CHECK(bind(&sum_of_args_7
, 1, 2, 3, 4, 5, 6, 7)()==28);
97 BOOST_CHECK(bind(&sum_of_args_8
, 1, 2, 3, 4, 5, 6, 7, 8)()==36);
98 BOOST_CHECK(bind(&sum_of_args_9
, 1, 2, 3, 4, 5, 6, 7, 8, 9)()==45);
100 // first parameter open
101 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
102 BOOST_CHECK(bind(&sum_of_args_1
, _1
)(i
)==1);
103 BOOST_CHECK(bind(&sum_of_args_2
, _1
, 2)(i
)==3);
104 BOOST_CHECK(bind(&sum_of_args_3
, _1
, 2, 3)(i
)==6);
105 BOOST_CHECK(bind(&sum_of_args_4
, _1
, 2, 3, 4)(i
)==10);
106 BOOST_CHECK(bind(&sum_of_args_5
, _1
, 2, 3, 4, 5)(i
)==15);
107 BOOST_CHECK(bind(&sum_of_args_6
, _1
, 2, 3, 4, 5, 6)(i
)==21);
108 BOOST_CHECK(bind(&sum_of_args_7
, _1
, 2, 3, 4, 5, 6, 7)(i
)==28);
109 BOOST_CHECK(bind(&sum_of_args_8
, _1
, 2, 3, 4, 5, 6, 7, 8)(i
)==36);
110 BOOST_CHECK(bind(&sum_of_args_9
, _1
, 2, 3, 4, 5, 6, 7, 8, 9)(i
)==45);
112 // two open arguments
113 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
114 BOOST_CHECK(bind(&sum_of_args_1
, _1
)(i
)==1);
115 BOOST_CHECK(bind(&sum_of_args_2
, _1
, _2
)(i
, j
)==3);
116 BOOST_CHECK(bind(&sum_of_args_3
, _1
, _2
, 3)(i
, j
)==6);
117 BOOST_CHECK(bind(&sum_of_args_4
, _1
, _2
, 3, 4)(i
, j
)==10);
118 BOOST_CHECK(bind(&sum_of_args_5
, _1
, _2
, 3, 4, 5)(i
, j
)==15);
119 BOOST_CHECK(bind(&sum_of_args_6
, _1
, _2
, 3, 4, 5, 6)(i
, j
)==21);
120 BOOST_CHECK(bind(&sum_of_args_7
, _1
, _2
, 3, 4, 5, 6, 7)(i
, j
)==28);
121 BOOST_CHECK(bind(&sum_of_args_8
, _1
, _2
, 3, 4, 5, 6, 7, 8)(i
, j
)==36);
122 BOOST_CHECK(bind(&sum_of_args_9
, _1
, _2
, 3, 4, 5, 6, 7, 8, 9)(i
, j
)==45);
124 // three open arguments
125 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
126 BOOST_CHECK(bind(&sum_of_args_1
, _1
)(i
)==1);
127 BOOST_CHECK(bind(&sum_of_args_2
, _1
, _2
)(i
, j
)==3);
128 BOOST_CHECK(bind(&sum_of_args_3
, _1
, _2
, _3
)(i
, j
, k
)==6);
129 BOOST_CHECK(bind(&sum_of_args_4
, _1
, _2
, _3
, 4)(i
, j
, k
)==10);
130 BOOST_CHECK(bind(&sum_of_args_5
, _1
, _2
, _3
, 4, 5)(i
, j
, k
)==15);
131 BOOST_CHECK(bind(&sum_of_args_6
, _1
, _2
, _3
, 4, 5, 6)(i
, j
, k
)==21);
132 BOOST_CHECK(bind(&sum_of_args_7
, _1
, _2
, _3
, 4, 5, 6, 7)(i
, j
, k
)==28);
133 BOOST_CHECK(bind(&sum_of_args_8
, _1
, _2
, _3
, 4, 5, 6, 7, 8)(i
, j
, k
)==36);
134 BOOST_CHECK(bind(&sum_of_args_9
, _1
, _2
, _3
, 4, 5, 6, 7, 8, 9)(i
, j
, k
)==45);
136 // function compositions with bind
137 BOOST_CHECK(bind(&sum_of_args_3
, bind(&sum_of_args_2
, _1
, 2), 2, 3)(i
)==8);
140 bind(&sum_of_args_0
), // 0
141 bind(&sum_of_args_1
, _1
), // 1
142 bind(&sum_of_args_2
, _1
, _2
), // 3
143 bind(&sum_of_args_3
, _1
, _2
, _3
), // 6
144 bind(&sum_of_args_4
, _1
, _2
, _3
, 4), // 10
145 bind(&sum_of_args_5
, _1
, _2
, _3
, 4, 5), // 15
146 bind(&sum_of_args_6
, _1
, _2
, _3
, 4, 5, 6), // 21
147 bind(&sum_of_args_7
, _1
, _2
, _3
, 4, 5, 6, 7), // 28
148 bind(&sum_of_args_8
, _1
, _2
, _3
, 4, 5, 6, 7, 8) // 36
153 bind(&sum_of_args_1
, // 12
154 bind(&sum_of_args_4
, // 12
155 bind(&sum_of_args_2
, // 3
156 bind(&sum_of_args_1
, // 1
157 bind(&sum_of_args_1
, _1
) // 1
164 BOOST_CHECK(result
== 12);
166 test_member_functions();