1//
2// Copyright (C) 2008 Peter Dimov
3//
4// Distributed under the Boost Software License, Version 1.0.
5// See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt
7//
8#define BOOST_THREAD_VERSION 3
9
10#include <boost/thread/thread_only.hpp>
11#include <boost/detail/lightweight_test.hpp>
12
13struct X
14{
15 mutable unsigned int hash;
16
17 X(): hash(0) {}
18
19 int f0() { f1(a1: 17); return 0; }
20 int g0() const { g1(a1: 17); return 0; }
21
22 int f1(int a1) { hash = (hash * 17041 + a1) % 32768; return 0; }
23 int g1(int a1) const { hash = (hash * 17041 + a1 * 2) % 32768; return 0; }
24
25 int f2(int a1, int a2) { f1(a1); f1(a1: a2); return 0; }
26 int g2(int a1, int a2) const { g1(a1); g1(a1: a2); return 0; }
27
28 int f3(int a1, int a2, int a3) { f2(a1, a2); f1(a1: a3); return 0; }
29 int g3(int a1, int a2, int a3) const { g2(a1, a2); g1(a1: a3); return 0; }
30
31 int f4(int a1, int a2, int a3, int a4) { f3(a1, a2, a3); f1(a1: a4); return 0; }
32 int g4(int a1, int a2, int a3, int a4) const { g3(a1, a2, a3); g1(a1: a4); return 0; }
33
34 int f5(int a1, int a2, int a3, int a4, int a5) { f4(a1, a2, a3, a4); f1(a1: a5); return 0; }
35 int g5(int a1, int a2, int a3, int a4, int a5) const { g4(a1, a2, a3, a4); g1(a1: a5); return 0; }
36
37 int f6(int a1, int a2, int a3, int a4, int a5, int a6) { f5(a1, a2, a3, a4, a5); f1(a1: a6); return 0; }
38 int g6(int a1, int a2, int a3, int a4, int a5, int a6) const { g5(a1, a2, a3, a4, a5); g1(a1: a6); return 0; }
39
40 int f7(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { f6(a1, a2, a3, a4, a5, a6); f1(a1: a7); return 0; }
41 int g7(int a1, int a2, int a3, int a4, int a5, int a6, int a7) const { g6(a1, a2, a3, a4, a5, a6); g1(a1: a7); return 0; }
42
43 int f8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { f7(a1, a2, a3, a4, a5, a6, a7); f1(a1: a8); return 0; }
44 int g8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) const { g7(a1, a2, a3, a4, a5, a6, a7); g1(a1: a8); return 0; }
45};
46
47int main()
48{
49 X x;
50
51 // 0
52
53 boost::thread( &X::f0, &x ).join();
54 boost::thread( &X::f0, boost::ref(t&: x) ).join();
55
56 boost::thread( &X::g0, &x ).join();
57 boost::thread( &X::g0, x ).join();
58 boost::thread( &X::g0, boost::ref(t&: x) ).join();
59
60 // 1
61
62 boost::thread( &X::f1, &x, 1 ).join();
63 boost::thread( &X::f1, boost::ref(t&: x), 1 ).join();
64
65 boost::thread( &X::g1, &x, 1 ).join();
66 boost::thread( &X::g1, x, 1 ).join();
67 boost::thread( &X::g1, boost::ref(t&: x), 1 ).join();
68
69 // 2
70
71 boost::thread( &X::f2, &x, 1, 2 ).join();
72 boost::thread( &X::f2, boost::ref(t&: x), 1, 2 ).join();
73
74 boost::thread( &X::g2, &x, 1, 2 ).join();
75 boost::thread( &X::g2, x, 1, 2 ).join();
76 boost::thread( &X::g2, boost::ref(t&: x), 1, 2 ).join();
77
78 // 3
79
80 boost::thread( &X::f3, &x, 1, 2, 3 ).join();
81 boost::thread( &X::f3, boost::ref(t&: x), 1, 2, 3 ).join();
82
83 boost::thread( &X::g3, &x, 1, 2, 3 ).join();
84 boost::thread( &X::g3, x, 1, 2, 3 ).join();
85 boost::thread( &X::g3, boost::ref(t&: x), 1, 2, 3 ).join();
86
87 // 4
88
89 boost::thread( &X::f4, &x, 1, 2, 3, 4 ).join();
90 boost::thread( &X::f4, boost::ref(t&: x), 1, 2, 3, 4 ).join();
91
92 boost::thread( &X::g4, &x, 1, 2, 3, 4 ).join();
93 boost::thread( &X::g4, x, 1, 2, 3, 4 ).join();
94 boost::thread( &X::g4, boost::ref(t&: x), 1, 2, 3, 4 ).join();
95
96 // 5
97
98 boost::thread( &X::f5, &x, 1, 2, 3, 4, 5 ).join();
99 boost::thread( &X::f5, boost::ref(t&: x), 1, 2, 3, 4, 5 ).join();
100
101 boost::thread( &X::g5, &x, 1, 2, 3, 4, 5 ).join();
102 boost::thread( &X::g5, x, 1, 2, 3, 4, 5 ).join();
103 boost::thread( &X::g5, boost::ref(t&: x), 1, 2, 3, 4, 5 ).join();
104
105 // 6
106
107 boost::thread( &X::f6, &x, 1, 2, 3, 4, 5, 6 ).join();
108 boost::thread( &X::f6, boost::ref(t&: x), 1, 2, 3, 4, 5, 6 ).join();
109
110 boost::thread( &X::g6, &x, 1, 2, 3, 4, 5, 6 ).join();
111 boost::thread( &X::g6, x, 1, 2, 3, 4, 5, 6 ).join();
112 boost::thread( &X::g6, boost::ref(t&: x), 1, 2, 3, 4, 5, 6 ).join();
113
114 // 7
115
116 boost::thread( &X::f7, &x, 1, 2, 3, 4, 5, 6, 7).join();
117 boost::thread( &X::f7, boost::ref(t&: x), 1, 2, 3, 4, 5, 6, 7).join();
118
119 boost::thread( &X::g7, &x, 1, 2, 3, 4, 5, 6, 7).join();
120 boost::thread( &X::g7, x, 1, 2, 3, 4, 5, 6, 7).join();
121 boost::thread( &X::g7, boost::ref(t&: x), 1, 2, 3, 4, 5, 6, 7).join();
122
123 // 8
124
125 boost::thread( &X::f8, &x, 1, 2, 3, 4, 5, 6, 7, 8 ).join();
126 boost::thread( &X::f8, boost::ref(t&: x), 1, 2, 3, 4, 5, 6, 7, 8 ).join();
127
128 boost::thread( &X::g8, &x, 1, 2, 3, 4, 5, 6, 7, 8 ).join();
129 boost::thread( &X::g8, x, 1, 2, 3, 4, 5, 6, 7, 8 ).join();
130 boost::thread( &X::g8, boost::ref(t&: x), 1, 2, 3, 4, 5, 6, 7, 8 ).join();
131
132 BOOST_TEST( x.hash == 23558 );
133
134 return boost::report_errors();
135}
136

source code of boost/libs/thread/test/test_thread_mf.cpp