]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/lambda/test/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);
88 void test_data_members()
92 BOOST_CHECK(bind(&B::i
, ref(b
))() == 10);
93 BOOST_CHECK(bind(&B::i
, b
)() == 10);
94 BOOST_CHECK(bind(&B::i
, _1
)(b
) == 10);
95 BOOST_CHECK(bind(&B::i
, _1
)(B(11)) == 11);
96 bind(&B::i
, ref(b
))() = 1;
97 BOOST_CHECK(b
.i
== 1);
100 int test_main(int, char *[]) {
102 int i
= 1; int j
= 2; int k
= 3;
105 // bind all parameters
106 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
107 BOOST_CHECK(bind(&sum_of_args_1
, 1)()==1);
108 BOOST_CHECK(bind(&sum_of_args_2
, 1, 2)()==3);
109 BOOST_CHECK(bind(&sum_of_args_3
, 1, 2, 3)()==6);
110 BOOST_CHECK(bind(&sum_of_args_4
, 1, 2, 3, 4)()==10);
111 BOOST_CHECK(bind(&sum_of_args_5
, 1, 2, 3, 4, 5)()==15);
112 BOOST_CHECK(bind(&sum_of_args_6
, 1, 2, 3, 4, 5, 6)()==21);
113 BOOST_CHECK(bind(&sum_of_args_7
, 1, 2, 3, 4, 5, 6, 7)()==28);
114 BOOST_CHECK(bind(&sum_of_args_8
, 1, 2, 3, 4, 5, 6, 7, 8)()==36);
115 BOOST_CHECK(bind(&sum_of_args_9
, 1, 2, 3, 4, 5, 6, 7, 8, 9)()==45);
117 // first parameter open
118 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
119 BOOST_CHECK(bind(&sum_of_args_1
, _1
)(i
)==1);
120 BOOST_CHECK(bind(&sum_of_args_2
, _1
, 2)(i
)==3);
121 BOOST_CHECK(bind(&sum_of_args_3
, _1
, 2, 3)(i
)==6);
122 BOOST_CHECK(bind(&sum_of_args_4
, _1
, 2, 3, 4)(i
)==10);
123 BOOST_CHECK(bind(&sum_of_args_5
, _1
, 2, 3, 4, 5)(i
)==15);
124 BOOST_CHECK(bind(&sum_of_args_6
, _1
, 2, 3, 4, 5, 6)(i
)==21);
125 BOOST_CHECK(bind(&sum_of_args_7
, _1
, 2, 3, 4, 5, 6, 7)(i
)==28);
126 BOOST_CHECK(bind(&sum_of_args_8
, _1
, 2, 3, 4, 5, 6, 7, 8)(i
)==36);
127 BOOST_CHECK(bind(&sum_of_args_9
, _1
, 2, 3, 4, 5, 6, 7, 8, 9)(i
)==45);
129 // two open arguments
130 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
131 BOOST_CHECK(bind(&sum_of_args_1
, _1
)(i
)==1);
132 BOOST_CHECK(bind(&sum_of_args_2
, _1
, _2
)(i
, j
)==3);
133 BOOST_CHECK(bind(&sum_of_args_3
, _1
, _2
, 3)(i
, j
)==6);
134 BOOST_CHECK(bind(&sum_of_args_4
, _1
, _2
, 3, 4)(i
, j
)==10);
135 BOOST_CHECK(bind(&sum_of_args_5
, _1
, _2
, 3, 4, 5)(i
, j
)==15);
136 BOOST_CHECK(bind(&sum_of_args_6
, _1
, _2
, 3, 4, 5, 6)(i
, j
)==21);
137 BOOST_CHECK(bind(&sum_of_args_7
, _1
, _2
, 3, 4, 5, 6, 7)(i
, j
)==28);
138 BOOST_CHECK(bind(&sum_of_args_8
, _1
, _2
, 3, 4, 5, 6, 7, 8)(i
, j
)==36);
139 BOOST_CHECK(bind(&sum_of_args_9
, _1
, _2
, 3, 4, 5, 6, 7, 8, 9)(i
, j
)==45);
141 // three open arguments
142 BOOST_CHECK(bind(&sum_of_args_0
)()==0);
143 BOOST_CHECK(bind(&sum_of_args_1
, _1
)(i
)==1);
144 BOOST_CHECK(bind(&sum_of_args_2
, _1
, _2
)(i
, j
)==3);
145 BOOST_CHECK(bind(&sum_of_args_3
, _1
, _2
, _3
)(i
, j
, k
)==6);
146 BOOST_CHECK(bind(&sum_of_args_4
, _1
, _2
, _3
, 4)(i
, j
, k
)==10);
147 BOOST_CHECK(bind(&sum_of_args_5
, _1
, _2
, _3
, 4, 5)(i
, j
, k
)==15);
148 BOOST_CHECK(bind(&sum_of_args_6
, _1
, _2
, _3
, 4, 5, 6)(i
, j
, k
)==21);
149 BOOST_CHECK(bind(&sum_of_args_7
, _1
, _2
, _3
, 4, 5, 6, 7)(i
, j
, k
)==28);
150 BOOST_CHECK(bind(&sum_of_args_8
, _1
, _2
, _3
, 4, 5, 6, 7, 8)(i
, j
, k
)==36);
151 BOOST_CHECK(bind(&sum_of_args_9
, _1
, _2
, _3
, 4, 5, 6, 7, 8, 9)(i
, j
, k
)==45);
153 // function compositions with bind
154 BOOST_CHECK(bind(&sum_of_args_3
, bind(&sum_of_args_2
, _1
, 2), 2, 3)(i
)==8);
157 bind(&sum_of_args_0
), // 0
158 bind(&sum_of_args_1
, _1
), // 1
159 bind(&sum_of_args_2
, _1
, _2
), // 3
160 bind(&sum_of_args_3
, _1
, _2
, _3
), // 6
161 bind(&sum_of_args_4
, _1
, _2
, _3
, 4), // 10
162 bind(&sum_of_args_5
, _1
, _2
, _3
, 4, 5), // 15
163 bind(&sum_of_args_6
, _1
, _2
, _3
, 4, 5, 6), // 21
164 bind(&sum_of_args_7
, _1
, _2
, _3
, 4, 5, 6, 7), // 28
165 bind(&sum_of_args_8
, _1
, _2
, _3
, 4, 5, 6, 7, 8) // 36
170 bind(&sum_of_args_1
, // 12
171 bind(&sum_of_args_4
, // 12
172 bind(&sum_of_args_2
, // 3
173 bind(&sum_of_args_1
, // 1
174 bind(&sum_of_args_1
, _1
) // 1
181 BOOST_CHECK(result
== 12);
183 test_member_functions();