blob: 4e648f54dadfddf61aff898901312fcec50f7263 [file] [log] [blame]
Brian Silvermance4aa8d2018-08-04 23:36:03 -07001#include <boost/config.hpp>
2
3#if defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) || defined( BOOST_NO_CXX11_SMART_PTR )
4
5int main()
6{
7}
8
9#else
10
11//
12// bind_unique_ptr_test.cpp
13//
14// Copyright (c) 2015 Peter Dimov
15//
16// Distributed under the Boost Software License, Version 1.0.
17// See accompanying file LICENSE_1_0.txt or copy at
18// http://www.boost.org/LICENSE_1_0.txt
19//
20
21#include <boost/bind.hpp>
22#include <boost/detail/lightweight_test.hpp>
23#include <memory>
24
25//
26
27void fv1( std::unique_ptr<int> p1 )
28{
29 BOOST_TEST( *p1 == 1 );
30}
31
32void fv2( std::unique_ptr<int> p1, std::unique_ptr<int> p2 )
33{
34 BOOST_TEST( *p1 == 1 );
35 BOOST_TEST( *p2 == 2 );
36}
37
38void fv3( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3 )
39{
40 BOOST_TEST( *p1 == 1 );
41 BOOST_TEST( *p2 == 2 );
42 BOOST_TEST( *p3 == 3 );
43}
44
45void fv4( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4 )
46{
47 BOOST_TEST( *p1 == 1 );
48 BOOST_TEST( *p2 == 2 );
49 BOOST_TEST( *p3 == 3 );
50 BOOST_TEST( *p4 == 4 );
51}
52
53void fv5( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5 )
54{
55 BOOST_TEST( *p1 == 1 );
56 BOOST_TEST( *p2 == 2 );
57 BOOST_TEST( *p3 == 3 );
58 BOOST_TEST( *p4 == 4 );
59 BOOST_TEST( *p5 == 5 );
60}
61
62void fv6( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6 )
63{
64 BOOST_TEST( *p1 == 1 );
65 BOOST_TEST( *p2 == 2 );
66 BOOST_TEST( *p3 == 3 );
67 BOOST_TEST( *p4 == 4 );
68 BOOST_TEST( *p5 == 5 );
69 BOOST_TEST( *p6 == 6 );
70}
71
72void fv7( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6, std::unique_ptr<int> p7 )
73{
74 BOOST_TEST( *p1 == 1 );
75 BOOST_TEST( *p2 == 2 );
76 BOOST_TEST( *p3 == 3 );
77 BOOST_TEST( *p4 == 4 );
78 BOOST_TEST( *p5 == 5 );
79 BOOST_TEST( *p6 == 6 );
80 BOOST_TEST( *p7 == 7 );
81}
82
83void fv8( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6, std::unique_ptr<int> p7, std::unique_ptr<int> p8 )
84{
85 BOOST_TEST( *p1 == 1 );
86 BOOST_TEST( *p2 == 2 );
87 BOOST_TEST( *p3 == 3 );
88 BOOST_TEST( *p4 == 4 );
89 BOOST_TEST( *p5 == 5 );
90 BOOST_TEST( *p6 == 6 );
91 BOOST_TEST( *p7 == 7 );
92 BOOST_TEST( *p8 == 8 );
93}
94
95void fv9( std::unique_ptr<int> p1, std::unique_ptr<int> p2, std::unique_ptr<int> p3, std::unique_ptr<int> p4, std::unique_ptr<int> p5, std::unique_ptr<int> p6, std::unique_ptr<int> p7, std::unique_ptr<int> p8, std::unique_ptr<int> p9 )
96{
97 BOOST_TEST( *p1 == 1 );
98 BOOST_TEST( *p2 == 2 );
99 BOOST_TEST( *p3 == 3 );
100 BOOST_TEST( *p4 == 4 );
101 BOOST_TEST( *p5 == 5 );
102 BOOST_TEST( *p6 == 6 );
103 BOOST_TEST( *p7 == 7 );
104 BOOST_TEST( *p8 == 8 );
105 BOOST_TEST( *p9 == 9 );
106}
107
108void test()
109{
110 {
111 std::unique_ptr<int> p1( new int(1) );
112
113 boost::bind( fv1, _1 )( std::move( p1 ) );
114 }
115
116 {
117 std::unique_ptr<int> p1( new int(1) );
118 std::unique_ptr<int> p2( new int(2) );
119
120 boost::bind( fv2, _1, _2 )( std::move( p1 ), std::move( p2 ) );
121 }
122
123 {
124 std::unique_ptr<int> p1( new int(1) );
125 std::unique_ptr<int> p2( new int(2) );
126 std::unique_ptr<int> p3( new int(3) );
127
128 boost::bind( fv3, _1, _2, _3 )( std::move( p1 ), std::move( p2 ), std::move( p3 ) );
129 }
130
131 {
132 std::unique_ptr<int> p1( new int(1) );
133 std::unique_ptr<int> p2( new int(2) );
134 std::unique_ptr<int> p3( new int(3) );
135 std::unique_ptr<int> p4( new int(4) );
136
137 boost::bind( fv4, _1, _2, _3, _4 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ) );
138 }
139
140 {
141 std::unique_ptr<int> p1( new int(1) );
142 std::unique_ptr<int> p2( new int(2) );
143 std::unique_ptr<int> p3( new int(3) );
144 std::unique_ptr<int> p4( new int(4) );
145 std::unique_ptr<int> p5( new int(5) );
146
147 boost::bind( fv5, _1, _2, _3, _4, _5 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ) );
148 }
149
150 {
151 std::unique_ptr<int> p1( new int(1) );
152 std::unique_ptr<int> p2( new int(2) );
153 std::unique_ptr<int> p3( new int(3) );
154 std::unique_ptr<int> p4( new int(4) );
155 std::unique_ptr<int> p5( new int(5) );
156 std::unique_ptr<int> p6( new int(6) );
157
158 boost::bind( fv6, _1, _2, _3, _4, _5, _6 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ) );
159 }
160
161 {
162 std::unique_ptr<int> p1( new int(1) );
163 std::unique_ptr<int> p2( new int(2) );
164 std::unique_ptr<int> p3( new int(3) );
165 std::unique_ptr<int> p4( new int(4) );
166 std::unique_ptr<int> p5( new int(5) );
167 std::unique_ptr<int> p6( new int(6) );
168 std::unique_ptr<int> p7( new int(7) );
169
170 boost::bind( fv7, _1, _2, _3, _4, _5, _6, _7 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ), std::move( p7 ) );
171 }
172
173 {
174 std::unique_ptr<int> p1( new int(1) );
175 std::unique_ptr<int> p2( new int(2) );
176 std::unique_ptr<int> p3( new int(3) );
177 std::unique_ptr<int> p4( new int(4) );
178 std::unique_ptr<int> p5( new int(5) );
179 std::unique_ptr<int> p6( new int(6) );
180 std::unique_ptr<int> p7( new int(7) );
181 std::unique_ptr<int> p8( new int(8) );
182
183 boost::bind( fv8, _1, _2, _3, _4, _5, _6, _7, _8 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ), std::move( p7 ), std::move( p8 ) );
184 }
185
186 {
187 std::unique_ptr<int> p1( new int(1) );
188 std::unique_ptr<int> p2( new int(2) );
189 std::unique_ptr<int> p3( new int(3) );
190 std::unique_ptr<int> p4( new int(4) );
191 std::unique_ptr<int> p5( new int(5) );
192 std::unique_ptr<int> p6( new int(6) );
193 std::unique_ptr<int> p7( new int(7) );
194 std::unique_ptr<int> p8( new int(8) );
195 std::unique_ptr<int> p9( new int(9) );
196
197 boost::bind( fv9, _1, _2, _3, _4, _5, _6, _7, _8, _9 )( std::move( p1 ), std::move( p2 ), std::move( p3 ), std::move( p4 ), std::move( p5 ), std::move( p6 ), std::move( p7 ), std::move( p8 ), std::move( p9 ) );
198 }
199}
200
201int main()
202{
203 test();
204 return boost::report_errors();
205}
206
207#endif // #if defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) || defined( BOOST_NO_CXX11_SMART_PTR )