1 #include <hpx/config.hpp>
2
3 #if defined(HPX_MSVC)
4 #pragma warning(disable: 4786) // identifier truncated in debug info
5 #pragma warning(disable: 4710) // function not inlined
6 #pragma warning(disable: 4711) // function selected for automatic inline expansion
7 #pragma warning(disable: 4514) // unreferenced inline removed
8 #endif
9
10 // Taken from the Boost.Bind library
11 //
12 // mem_fn_eq_test.cpp - boost::mem_fn equality operator
13 //
14 // Copyright (c) 2004 Peter Dimov
15 // Copyright (c) 2013 Agustin Berge
16 //
17 // Distributed under the Boost Software License, Version 1.0. (See
18 // accompanying file LICENSE_1_0.txt or copy at
19 // http://www.boost.org/LICENSE_1_0.txt)
20 //
21
22 #include <hpx/util/mem_fn.hpp>
23
24 #include <iostream>
25
26 #include <hpx/util/lightweight_test.hpp>
27
28 struct X
29 {
30 int dm_1;
31 int dm_2;
32
33 // 0
34
mf0_1X35 int mf0_1() { return 0; }
mf0_2X36 int mf0_2() { return 0; }
37
cmf0_1X38 int cmf0_1() const { return 0; }
cmf0_2X39 int cmf0_2() const { return 0; }
40
mf0v_1X41 void mf0v_1() {}
mf0v_2X42 void mf0v_2() {}
43
cmf0v_1X44 void cmf0v_1() const {}
cmf0v_2X45 void cmf0v_2() const {}
46
47 // 1
48
mf1_1X49 int mf1_1(int) { return 0; }
mf1_2X50 int mf1_2(int) { return 0; }
51
cmf1_1X52 int cmf1_1(int) const { return 0; }
cmf1_2X53 int cmf1_2(int) const { return 0; }
54
mf1v_1X55 void mf1v_1(int) {}
mf1v_2X56 void mf1v_2(int) {}
57
cmf1v_1X58 void cmf1v_1(int) const {}
cmf1v_2X59 void cmf1v_2(int) const {}
60
61 // 2
62
mf2_1X63 int mf2_1(int, int) { return 0; }
mf2_2X64 int mf2_2(int, int) { return 0; }
65
cmf2_1X66 int cmf2_1(int, int) const { return 0; }
cmf2_2X67 int cmf2_2(int, int) const { return 0; }
68
mf2v_1X69 void mf2v_1(int, int) {}
mf2v_2X70 void mf2v_2(int, int) {}
71
cmf2v_1X72 void cmf2v_1(int, int) const {}
cmf2v_2X73 void cmf2v_2(int, int) const {}
74
75 // 3
76
mf3_1X77 int mf3_1(int, int, int) { return 0; }
mf3_2X78 int mf3_2(int, int, int) { return 0; }
79
cmf3_1X80 int cmf3_1(int, int, int) const { return 0; }
cmf3_2X81 int cmf3_2(int, int, int) const { return 0; }
82
mf3v_1X83 void mf3v_1(int, int, int) {}
mf3v_2X84 void mf3v_2(int, int, int) {}
85
cmf3v_1X86 void cmf3v_1(int, int, int) const {}
cmf3v_2X87 void cmf3v_2(int, int, int) const {}
88
89 // 4
90
mf4_1X91 int mf4_1(int, int, int, int) { return 0; }
mf4_2X92 int mf4_2(int, int, int, int) { return 0; }
93
cmf4_1X94 int cmf4_1(int, int, int, int) const { return 0; }
cmf4_2X95 int cmf4_2(int, int, int, int) const { return 0; }
96
mf4v_1X97 void mf4v_1(int, int, int, int) {}
mf4v_2X98 void mf4v_2(int, int, int, int) {}
99
cmf4v_1X100 void cmf4v_1(int, int, int, int) const {}
cmf4v_2X101 void cmf4v_2(int, int, int, int) const {}
102
103 // 5
104
mf5_1X105 int mf5_1(int, int, int, int, int) { return 0; }
mf5_2X106 int mf5_2(int, int, int, int, int) { return 0; }
107
cmf5_1X108 int cmf5_1(int, int, int, int, int) const { return 0; }
cmf5_2X109 int cmf5_2(int, int, int, int, int) const { return 0; }
110
mf5v_1X111 void mf5v_1(int, int, int, int, int) {}
mf5v_2X112 void mf5v_2(int, int, int, int, int) {}
113
cmf5v_1X114 void cmf5v_1(int, int, int, int, int) const {}
cmf5v_2X115 void cmf5v_2(int, int, int, int, int) const {}
116
117 // 6
118
mf6_1X119 int mf6_1(int, int, int, int, int, int) { return 0; }
mf6_2X120 int mf6_2(int, int, int, int, int, int) { return 0; }
121
cmf6_1X122 int cmf6_1(int, int, int, int, int, int) const { return 0; }
cmf6_2X123 int cmf6_2(int, int, int, int, int, int) const { return 0; }
124
mf6v_1X125 void mf6v_1(int, int, int, int, int, int) {}
mf6v_2X126 void mf6v_2(int, int, int, int, int, int) {}
127
cmf6v_1X128 void cmf6v_1(int, int, int, int, int, int) const {}
cmf6v_2X129 void cmf6v_2(int, int, int, int, int, int) const {}
130
131 // 7
132
mf7_1X133 int mf7_1(int, int, int, int, int, int, int) { return 0; }
mf7_2X134 int mf7_2(int, int, int, int, int, int, int) { return 0; }
135
cmf7_1X136 int cmf7_1(int, int, int, int, int, int, int) const { return 0; }
cmf7_2X137 int cmf7_2(int, int, int, int, int, int, int) const { return 0; }
138
mf7v_1X139 void mf7v_1(int, int, int, int, int, int, int) {}
mf7v_2X140 void mf7v_2(int, int, int, int, int, int, int) {}
141
cmf7v_1X142 void cmf7v_1(int, int, int, int, int, int, int) const {}
cmf7v_2X143 void cmf7v_2(int, int, int, int, int, int, int) const {}
144
145 // 8
146
mf8_1X147 int mf8_1(int, int, int, int, int, int, int, int) { return 0; }
mf8_2X148 int mf8_2(int, int, int, int, int, int, int, int) { return 0; }
149
cmf8_1X150 int cmf8_1(int, int, int, int, int, int, int, int) const { return 0; }
cmf8_2X151 int cmf8_2(int, int, int, int, int, int, int, int) const { return 0; }
152
mf8v_1X153 void mf8v_1(int, int, int, int, int, int, int, int) {}
mf8v_2X154 void mf8v_2(int, int, int, int, int, int, int, int) {}
155
cmf8v_1X156 void cmf8v_1(int, int, int, int, int, int, int, int) const {}
cmf8v_2X157 void cmf8v_2(int, int, int, int, int, int, int, int) const {}
158
159 };
160
main()161 int main()
162 {
163 HPX_TEST( hpx::util::mem_fn(&X::dm_1) == hpx::util::mem_fn(&X::dm_1) );
164 HPX_TEST( hpx::util::mem_fn(&X::dm_1) != hpx::util::mem_fn(&X::dm_2) );
165
166 // 0
167
168 HPX_TEST( hpx::util::mem_fn(&X::mf0_1) == hpx::util::mem_fn(&X::mf0_1) );
169 HPX_TEST( hpx::util::mem_fn(&X::mf0_1) != hpx::util::mem_fn(&X::mf0_2) );
170
171 HPX_TEST( hpx::util::mem_fn(&X::cmf0_1) == hpx::util::mem_fn(&X::cmf0_1) );
172 HPX_TEST( hpx::util::mem_fn(&X::cmf0_1) != hpx::util::mem_fn(&X::cmf0_2) );
173
174 HPX_TEST( hpx::util::mem_fn(&X::mf0v_1) == hpx::util::mem_fn(&X::mf0v_1) );
175 HPX_TEST( hpx::util::mem_fn(&X::mf0v_1) != hpx::util::mem_fn(&X::mf0v_2) );
176
177 HPX_TEST( hpx::util::mem_fn(&X::cmf0v_1) == hpx::util::mem_fn(&X::cmf0v_1) );
178 HPX_TEST( hpx::util::mem_fn(&X::cmf0v_1) != hpx::util::mem_fn(&X::cmf0v_2) );
179
180 // 1
181
182 HPX_TEST( hpx::util::mem_fn(&X::mf1_1) == hpx::util::mem_fn(&X::mf1_1) );
183 HPX_TEST( hpx::util::mem_fn(&X::mf1_1) != hpx::util::mem_fn(&X::mf1_2) );
184
185 HPX_TEST( hpx::util::mem_fn(&X::cmf1_1) == hpx::util::mem_fn(&X::cmf1_1) );
186 HPX_TEST( hpx::util::mem_fn(&X::cmf1_1) != hpx::util::mem_fn(&X::cmf1_2) );
187
188 HPX_TEST( hpx::util::mem_fn(&X::mf1v_1) == hpx::util::mem_fn(&X::mf1v_1) );
189 HPX_TEST( hpx::util::mem_fn(&X::mf1v_1) != hpx::util::mem_fn(&X::mf1v_2) );
190
191 HPX_TEST( hpx::util::mem_fn(&X::cmf1v_1) == hpx::util::mem_fn(&X::cmf1v_1) );
192 HPX_TEST( hpx::util::mem_fn(&X::cmf1v_1) != hpx::util::mem_fn(&X::cmf1v_2) );
193
194 // 2
195
196 HPX_TEST( hpx::util::mem_fn(&X::mf2_1) == hpx::util::mem_fn(&X::mf2_1) );
197 HPX_TEST( hpx::util::mem_fn(&X::mf2_1) != hpx::util::mem_fn(&X::mf2_2) );
198
199 HPX_TEST( hpx::util::mem_fn(&X::cmf2_1) == hpx::util::mem_fn(&X::cmf2_1) );
200 HPX_TEST( hpx::util::mem_fn(&X::cmf2_1) != hpx::util::mem_fn(&X::cmf2_2) );
201
202 HPX_TEST( hpx::util::mem_fn(&X::mf2v_1) == hpx::util::mem_fn(&X::mf2v_1) );
203 HPX_TEST( hpx::util::mem_fn(&X::mf2v_1) != hpx::util::mem_fn(&X::mf2v_2) );
204
205 HPX_TEST( hpx::util::mem_fn(&X::cmf2v_1) == hpx::util::mem_fn(&X::cmf2v_1) );
206 HPX_TEST( hpx::util::mem_fn(&X::cmf2v_1) != hpx::util::mem_fn(&X::cmf2v_2) );
207
208 // 3
209
210 HPX_TEST( hpx::util::mem_fn(&X::mf3_1) == hpx::util::mem_fn(&X::mf3_1) );
211 HPX_TEST( hpx::util::mem_fn(&X::mf3_1) != hpx::util::mem_fn(&X::mf3_2) );
212
213 HPX_TEST( hpx::util::mem_fn(&X::cmf3_1) == hpx::util::mem_fn(&X::cmf3_1) );
214 HPX_TEST( hpx::util::mem_fn(&X::cmf3_1) != hpx::util::mem_fn(&X::cmf3_2) );
215
216 HPX_TEST( hpx::util::mem_fn(&X::mf3v_1) == hpx::util::mem_fn(&X::mf3v_1) );
217 HPX_TEST( hpx::util::mem_fn(&X::mf3v_1) != hpx::util::mem_fn(&X::mf3v_2) );
218
219 HPX_TEST( hpx::util::mem_fn(&X::cmf3v_1) == hpx::util::mem_fn(&X::cmf3v_1) );
220 HPX_TEST( hpx::util::mem_fn(&X::cmf3v_1) != hpx::util::mem_fn(&X::cmf3v_2) );
221
222 // 4
223
224 HPX_TEST( hpx::util::mem_fn(&X::mf4_1) == hpx::util::mem_fn(&X::mf4_1) );
225 HPX_TEST( hpx::util::mem_fn(&X::mf4_1) != hpx::util::mem_fn(&X::mf4_2) );
226
227 HPX_TEST( hpx::util::mem_fn(&X::cmf4_1) == hpx::util::mem_fn(&X::cmf4_1) );
228 HPX_TEST( hpx::util::mem_fn(&X::cmf4_1) != hpx::util::mem_fn(&X::cmf4_2) );
229
230 HPX_TEST( hpx::util::mem_fn(&X::mf4v_1) == hpx::util::mem_fn(&X::mf4v_1) );
231 HPX_TEST( hpx::util::mem_fn(&X::mf4v_1) != hpx::util::mem_fn(&X::mf4v_2) );
232
233 HPX_TEST( hpx::util::mem_fn(&X::cmf4v_1) == hpx::util::mem_fn(&X::cmf4v_1) );
234 HPX_TEST( hpx::util::mem_fn(&X::cmf4v_1) != hpx::util::mem_fn(&X::cmf4v_2) );
235
236 // 5
237
238 HPX_TEST( hpx::util::mem_fn(&X::mf5_1) == hpx::util::mem_fn(&X::mf5_1) );
239 HPX_TEST( hpx::util::mem_fn(&X::mf5_1) != hpx::util::mem_fn(&X::mf5_2) );
240
241 HPX_TEST( hpx::util::mem_fn(&X::cmf5_1) == hpx::util::mem_fn(&X::cmf5_1) );
242 HPX_TEST( hpx::util::mem_fn(&X::cmf5_1) != hpx::util::mem_fn(&X::cmf5_2) );
243
244 HPX_TEST( hpx::util::mem_fn(&X::mf5v_1) == hpx::util::mem_fn(&X::mf5v_1) );
245 HPX_TEST( hpx::util::mem_fn(&X::mf5v_1) != hpx::util::mem_fn(&X::mf5v_2) );
246
247 HPX_TEST( hpx::util::mem_fn(&X::cmf5v_1) == hpx::util::mem_fn(&X::cmf5v_1) );
248 HPX_TEST( hpx::util::mem_fn(&X::cmf5v_1) != hpx::util::mem_fn(&X::cmf5v_2) );
249
250 // 6
251
252 HPX_TEST( hpx::util::mem_fn(&X::mf6_1) == hpx::util::mem_fn(&X::mf6_1) );
253 HPX_TEST( hpx::util::mem_fn(&X::mf6_1) != hpx::util::mem_fn(&X::mf6_2) );
254
255 HPX_TEST( hpx::util::mem_fn(&X::cmf6_1) == hpx::util::mem_fn(&X::cmf6_1) );
256 HPX_TEST( hpx::util::mem_fn(&X::cmf6_1) != hpx::util::mem_fn(&X::cmf6_2) );
257
258 HPX_TEST( hpx::util::mem_fn(&X::mf6v_1) == hpx::util::mem_fn(&X::mf6v_1) );
259 HPX_TEST( hpx::util::mem_fn(&X::mf6v_1) != hpx::util::mem_fn(&X::mf6v_2) );
260
261 HPX_TEST( hpx::util::mem_fn(&X::cmf6v_1) == hpx::util::mem_fn(&X::cmf6v_1) );
262 HPX_TEST( hpx::util::mem_fn(&X::cmf6v_1) != hpx::util::mem_fn(&X::cmf6v_2) );
263
264 // 7
265
266 HPX_TEST( hpx::util::mem_fn(&X::mf7_1) == hpx::util::mem_fn(&X::mf7_1) );
267 HPX_TEST( hpx::util::mem_fn(&X::mf7_1) != hpx::util::mem_fn(&X::mf7_2) );
268
269 HPX_TEST( hpx::util::mem_fn(&X::cmf7_1) == hpx::util::mem_fn(&X::cmf7_1) );
270 HPX_TEST( hpx::util::mem_fn(&X::cmf7_1) != hpx::util::mem_fn(&X::cmf7_2) );
271
272 HPX_TEST( hpx::util::mem_fn(&X::mf7v_1) == hpx::util::mem_fn(&X::mf7v_1) );
273 HPX_TEST( hpx::util::mem_fn(&X::mf7v_1) != hpx::util::mem_fn(&X::mf7v_2) );
274
275 HPX_TEST( hpx::util::mem_fn(&X::cmf7v_1) == hpx::util::mem_fn(&X::cmf7v_1) );
276 HPX_TEST( hpx::util::mem_fn(&X::cmf7v_1) != hpx::util::mem_fn(&X::cmf7v_2) );
277
278 // 8
279
280 HPX_TEST( hpx::util::mem_fn(&X::mf8_1) == hpx::util::mem_fn(&X::mf8_1) );
281 HPX_TEST( hpx::util::mem_fn(&X::mf8_1) != hpx::util::mem_fn(&X::mf8_2) );
282
283 HPX_TEST( hpx::util::mem_fn(&X::cmf8_1) == hpx::util::mem_fn(&X::cmf8_1) );
284 HPX_TEST( hpx::util::mem_fn(&X::cmf8_1) != hpx::util::mem_fn(&X::cmf8_2) );
285
286 HPX_TEST( hpx::util::mem_fn(&X::mf8v_1) == hpx::util::mem_fn(&X::mf8v_1) );
287 HPX_TEST( hpx::util::mem_fn(&X::mf8v_1) != hpx::util::mem_fn(&X::mf8v_2) );
288
289 HPX_TEST( hpx::util::mem_fn(&X::cmf8v_1) == hpx::util::mem_fn(&X::cmf8v_1) );
290 HPX_TEST( hpx::util::mem_fn(&X::cmf8v_1) != hpx::util::mem_fn(&X::cmf8v_2) );
291
292
293 return hpx::util::report_errors();
294 }
295