1 #include <boost/config.hpp>
2 
3 //
4 //  bind_fwd_test.cpp - forwarding test
5 //
6 //  Copyright (c) 2015 Peter Dimov
7 //
8 //  Distributed under the Boost Software License, Version 1.0.
9 //  See accompanying file LICENSE_1_0.txt or copy at
10 //  http://www.boost.org/LICENSE_1_0.txt
11 //
12 
13 #include <boost/bind/bind.hpp>
14 #include <boost/core/lightweight_test.hpp>
15 
16 using namespace boost::placeholders;
17 
18 //
19 
fv1(int & a)20 void fv1( int & a )
21 {
22     a = 1;
23 }
24 
fv2(int & a,int & b)25 void fv2( int & a, int & b )
26 {
27     a = 1;
28     b = 2;
29 }
30 
fv3(int & a,int & b,int & c)31 void fv3( int & a, int & b, int & c )
32 {
33     a = 1;
34     b = 2;
35     c = 3;
36 }
37 
fv4(int & a,int & b,int & c,int & d)38 void fv4( int & a, int & b, int & c, int & d )
39 {
40     a = 1;
41     b = 2;
42     c = 3;
43     d = 4;
44 }
45 
fv5(int & a,int & b,int & c,int & d,int & e)46 void fv5( int & a, int & b, int & c, int & d, int & e )
47 {
48     a = 1;
49     b = 2;
50     c = 3;
51     d = 4;
52     e = 5;
53 }
54 
fv6(int & a,int & b,int & c,int & d,int & e,int & f)55 void fv6( int & a, int & b, int & c, int & d, int & e, int & f )
56 {
57     a = 1;
58     b = 2;
59     c = 3;
60     d = 4;
61     e = 5;
62     f = 6;
63 }
64 
fv7(int & a,int & b,int & c,int & d,int & e,int & f,int & g)65 void fv7( int & a, int & b, int & c, int & d, int & e, int & f, int & g )
66 {
67     a = 1;
68     b = 2;
69     c = 3;
70     d = 4;
71     e = 5;
72     f = 6;
73     g = 7;
74 }
75 
fv8(int & a,int & b,int & c,int & d,int & e,int & f,int & g,int & h)76 void fv8( int & a, int & b, int & c, int & d, int & e, int & f, int & g, int & h )
77 {
78     a = 1;
79     b = 2;
80     c = 3;
81     d = 4;
82     e = 5;
83     f = 6;
84     g = 7;
85     h = 8;
86 }
87 
fv9(int & a,int & b,int & c,int & d,int & e,int & f,int & g,int & h,int & i)88 void fv9( int & a, int & b, int & c, int & d, int & e, int & f, int & g, int & h, int & i )
89 {
90     a = 1;
91     b = 2;
92     c = 3;
93     d = 4;
94     e = 5;
95     f = 6;
96     g = 7;
97     h = 8;
98     i = 9;
99 }
100 
test()101 void test()
102 {
103     {
104         int a = 0;
105 
106         boost::bind( fv1, _1 )( a );
107 
108         BOOST_TEST( a == 1 );
109     }
110 
111     {
112         int a = 0;
113         int b = 0;
114 
115         boost::bind( fv2, _1, _2 )( a, b );
116 
117         BOOST_TEST( a == 1 );
118         BOOST_TEST( b == 2 );
119     }
120 
121     {
122         int a = 0;
123         int b = 0;
124         int c = 0;
125 
126         boost::bind( fv3, _1, _2, _3 )( a, b, c );
127 
128         BOOST_TEST( a == 1 );
129         BOOST_TEST( b == 2 );
130         BOOST_TEST( c == 3 );
131     }
132 
133     {
134         int a = 0;
135         int b = 0;
136         int c = 0;
137         int d = 0;
138 
139         boost::bind( fv4, _1, _2, _3, _4 )( a, b, c, d );
140 
141         BOOST_TEST( a == 1 );
142         BOOST_TEST( b == 2 );
143         BOOST_TEST( c == 3 );
144         BOOST_TEST( d == 4 );
145     }
146 
147     {
148         int a = 0;
149         int b = 0;
150         int c = 0;
151         int d = 0;
152         int e = 0;
153 
154         boost::bind( fv5, _1, _2, _3, _4, _5 )( a, b, c, d, e );
155 
156         BOOST_TEST( a == 1 );
157         BOOST_TEST( b == 2 );
158         BOOST_TEST( c == 3 );
159         BOOST_TEST( d == 4 );
160         BOOST_TEST( e == 5 );
161     }
162 
163     {
164         int a = 0;
165         int b = 0;
166         int c = 0;
167         int d = 0;
168         int e = 0;
169         int f = 0;
170 
171         boost::bind( fv6, _1, _2, _3, _4, _5, _6 )( a, b, c, d, e, f );
172 
173         BOOST_TEST( a == 1 );
174         BOOST_TEST( b == 2 );
175         BOOST_TEST( c == 3 );
176         BOOST_TEST( d == 4 );
177         BOOST_TEST( e == 5 );
178         BOOST_TEST( f == 6 );
179     }
180 
181     {
182         int a = 0;
183         int b = 0;
184         int c = 0;
185         int d = 0;
186         int e = 0;
187         int f = 0;
188         int g = 0;
189 
190         boost::bind( fv7, _1, _2, _3, _4, _5, _6, _7 )( a, b, c, d, e, f, g );
191 
192         BOOST_TEST( a == 1 );
193         BOOST_TEST( b == 2 );
194         BOOST_TEST( c == 3 );
195         BOOST_TEST( d == 4 );
196         BOOST_TEST( e == 5 );
197         BOOST_TEST( f == 6 );
198         BOOST_TEST( g == 7 );
199     }
200 
201     {
202         int a = 0;
203         int b = 0;
204         int c = 0;
205         int d = 0;
206         int e = 0;
207         int f = 0;
208         int g = 0;
209         int h = 0;
210 
211         boost::bind( fv8, _1, _2, _3, _4, _5, _6, _7, _8 )( a, b, c, d, e, f, g, h );
212 
213         BOOST_TEST( a == 1 );
214         BOOST_TEST( b == 2 );
215         BOOST_TEST( c == 3 );
216         BOOST_TEST( d == 4 );
217         BOOST_TEST( e == 5 );
218         BOOST_TEST( f == 6 );
219         BOOST_TEST( g == 7 );
220         BOOST_TEST( h == 8 );
221     }
222 
223     {
224         int a = 0;
225         int b = 0;
226         int c = 0;
227         int d = 0;
228         int e = 0;
229         int f = 0;
230         int g = 0;
231         int h = 0;
232         int i = 0;
233 
234         boost::bind( fv9, _1, _2, _3, _4, _5, _6, _7, _8, _9 )( a, b, c, d, e, f, g, h, i );
235 
236         BOOST_TEST( a == 1 );
237         BOOST_TEST( b == 2 );
238         BOOST_TEST( c == 3 );
239         BOOST_TEST( d == 4 );
240         BOOST_TEST( e == 5 );
241         BOOST_TEST( f == 6 );
242         BOOST_TEST( g == 7 );
243         BOOST_TEST( h == 8 );
244         BOOST_TEST( i == 9 );
245     }
246 }
247 
main()248 int main()
249 {
250     test();
251     return boost::report_errors();
252 }
253