• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#  (C) Copyright William E. Kempf 2001.
2#  (C) Copyright 2007 Anthony Williams.
3#  (C) Copyright 2011-2012 Vicente J.Botet Escriba.
4#  Distributed under the Boost Software License, Version 1.0. (See accompanying
5#  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6#
7# Boost.Threads test Jamfile
8#
9# Additional configuration variables used:
10#   1. PTW32 may be used on Win32 platforms to specify that the pthreads-win32
11#      library should be used instead of "native" threads. This feature is
12#      mostly used for testing and it's generally recommended you use the
13#      native threading libraries instead. PTW32 should be set to be a list
14#      of two strings, the first specifying the installation path of the
15#      pthreads-win32 library and the second specifying which library
16#      variant to link against (see the pthreads-win32 documentation).
17#      Example: jam -sPTW32="c:\pthreads-win32 pthreadVCE.lib"
18
19# bring in rules for testing
20import testing ;
21import regex ;
22import path ;
23import os ;
24
25project
26    : requirements
27        <threading>multi
28
29        <define>BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED
30
31        <warnings>all
32        <toolset>gcc:<cxxflags>-Wextra
33        <toolset>gcc:<cxxflags>-pedantic
34        <toolset>gcc:<cxxflags>-Wno-long-long
35        #<toolset>gcc:<cxxflags>-ansi
36        #<toolset>gcc:<cxxflags>-fpermissive
37        <toolset>gcc-4:<cxxflags>-Wno-variadic-macros
38        <toolset>gcc-5:<cxxflags>-Wno-variadic-macros
39        #<toolset>gcc:<cxxflags>-Wunused-local-typedefs
40        <toolset>gcc:<cxxflags>-Wunused-function
41        <toolset>gcc:<cxxflags>-Wno-unused-parameter
42
43        <toolset>darwin:<cxxflags>-Wextra
44        <toolset>darwin:<cxxflags>-pedantic
45        <toolset>darwin:<cxxflags>-Wno-long-long
46        #<toolset>darwin:<cxxflags>-ansi # doesn't work for 4.1.2
47        <toolset>darwin:<cxxflags>-fpermissive
48        <toolset>darwin:<cxxflags>-Wno-variadic-macros
49        #<toolset>darwin:<cxxflags>-Wunused-local-typedefs
50        <toolset>darwin:<cxxflags>-Wunused-function
51        <toolset>darwin:<cxxflags>-Wno-unused-parameter
52
53        #<toolset>pathscale:<cxxflags>-Wextra
54        <toolset>pathscale:<cxxflags>-Wno-long-long
55        <toolset>pathscale:<cxxflags>-pedantic
56
57        <toolset>clang:<warnings>on
58        <toolset>clang:<cxxflags>-Wextra
59        #<toolset>clang:<cxxflags>-pedantic
60        <toolset>clang:<cxxflags>-Wno-long-long
61        #<toolset>clang:<cxxflags>-ansi
62        #<toolset>clang:<cxxflags>-fpermissive # doesn't work
63        <toolset>clang:<cxxflags>-Wunused-function
64        <toolset>clang:<cxxflags>-Wno-unused-parameter
65
66        #<toolset>gcc-mingw-4.4.0:<cxxflags>-fdiagnostics-show-option
67        #<toolset>gcc-mingw-4.5.0:<cxxflags>-fdiagnostics-show-option
68        #<toolset>gcc-mingw-4.6.0:<cxxflags>-fdiagnostics-show-option
69        #<toolset>gcc-mingw-4.6.3:<cxxflags>-fdiagnostics-show-option
70        #<toolset>gcc-mingw-4.7.0:<cxxflags>-fdiagnostics-show-option
71        #<toolset>gcc-mingw-4.8.0:<cxxflags>-fdiagnostics-show-option
72
73        <toolset>darwin-4.6.2:<cxxflags>-ansi
74        #<toolset>darwin-4.6.2:<cxxflags>-Wno-delete-non-virtual-dtor # doesn't work
75        <toolset>darwin-4.7.0:<cxxflags>-ansi
76        <toolset>darwin-4.7.0:<cxxflags>-Wno-delete-non-virtual-dtor
77        #<toolset>darwin-4.6.2:<cxxflags>-Wno-unused-local-typedefs
78        #<toolset>darwin-4.7.1:<cxxflags>-Wno-unused-local-typedefs
79        #<toolset>darwin-4.7.2:<cxxflags>-Wno-unused-local-typedefs
80        #<toolset>darwin-4.8.0:<cxxflags>-Wno-unused-local-typedefs
81        #<toolset>darwin-4.6.2x:<cxxflags>-Wno-unused-local-typedefs
82        #<toolset>darwin-4.7.1x:<cxxflags>-Wno-unused-local-typedefs
83        #<toolset>darwin-4.7.2x:<cxxflags>-Wno-unused-local-typedefs
84        #<toolset>darwin-4.8.0x:<cxxflags>-Wno-unused-local-typedefs
85
86        #<toolset>clang-2.8:<cxxflags>-Wno-delete-non-virtual-dtor
87        #<toolset>clang-2.8:<cxxflags>-Wno-unused-function
88        #<toolset>clang-2.9:<cxxflags>-Wno-delete-non-virtual-dtor
89        #<toolset>clang-2.9:<cxxflags>-Wno-unused-function
90        <toolset>clang-3.0:<cxxflags>-Wno-delete-non-virtual-dtor
91        #<toolset>clang-3.0:<cxxflags>-Wno-unused-function
92        #<toolset>clang-3.0:<cxxflags>-Wno-unused-variable
93        #<toolset>clang-3.1:<cxxflags>-Wno-bind-to-temporary-copy
94        #<toolset>clang-3.2:<cxxflags>-Wno-bind-to-temporary-copy
95
96# Note: Some of the remarks from the Intel compiler are disabled
97# remark #193: zero used for undefined preprocessing identifier "XXX"
98# remark #304: access control not specified ("public" by default)
99# remark #593: variable "XXX" was set but never used
100# remark #1418: external function definition with no prior declaration
101# remark #2415: variable "XXX" of static storage duration was declared but never referenced
102
103        <toolset>intel:<cxxflags>-wd193,304,383,444
104        <toolset>intel:<cxxflags>-wd593,981
105        <toolset>intel:<cxxflags>-wd1418
106        <toolset>intel:<cxxflags>-wd2415
107
108        <toolset>msvc:<cxxflags>/wd4100
109        <toolset>msvc:<cxxflags>/wd4512
110        <toolset>msvc:<cxxflags>/wd6246
111    ;
112
113rule thread-run ( sources )
114{
115    sources = $(sources) winrt_init.cpp ;
116    return
117    [ run $(sources) ../build//boost_thread ]
118    [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
119        : : : : $(sources[1]:B)_lib ]
120    ;
121}
122
123
124rule thread-test ( sources )
125{
126    sources = $(sources) winrt_init.cpp ;
127    return
128    [ run $(sources) ../build//boost_thread : : :
129      <library>/boost/test//boost_unit_test_framework
130    ]
131    [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
132        : : :
133      <library>/boost/test//boost_unit_test_framework/<link>static
134    : $(sources[1]:B)_lib
135    ]
136    ;
137}
138
139rule thread-run2 ( sources : name )
140{
141    sources = $(sources) winrt_init.cpp ;
142    return
143    [ run $(sources) ../build//boost_thread : : :
144      : $(name) ]
145    [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
146        : : :
147      : $(name)_lib ]
148    ;
149}
150
151rule thread-run2-noit ( sources : name : reqs * )
152{
153    sources = $(sources) winrt_init.cpp ;
154    return
155    [ run $(sources) ../build//boost_thread : : : $(reqs)
156      : $(name) ]
157    [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
158        : : : $(reqs)
159      : $(name)_lib ]
160    #[ run $(sources) ../build//boost_thread : : :
161    #  <define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
162    #  : $(name)_noit ]
163    ;
164}
165
166rule thread-run2-noit-pthread ( sources : name )
167{
168    sources = $(sources) winrt_init.cpp ;
169    return
170    [ run $(sources) ../build//boost_thread : : : <threadapi>win32:<build>no
171      : $(name) ]
172    [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
173        : : : <threadapi>win32:<build>no
174      : $(name)_lib ]
175    #[ run $(sources) ../build//boost_thread : : :
176    #  <define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
177    #  : $(name)_noit ]
178    ;
179}
180
181rule thread-run2-h ( sources : name )
182{
183    sources = $(sources) winrt_init.cpp ;
184    return
185    [ run $(sources) : : :
186      <define>BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
187      <define>BOOST_THREAD_VERSION=3
188    : $(name)_h ]
189    ;
190}
191
192
193rule thread-run-lib2 ( sources : name )
194{
195    sources = $(sources) winrt_init.cpp ;
196    return
197    [ run $(sources) ../src/tss_null.cpp ../build//boost_thread/<link>static
198        : : :
199      : $(name)_lib ]
200    ;
201}
202
203
204rule thread-compile-fail ( sources : reqs * : name )
205{
206    return
207    [ compile-fail $(sources)
208        : $(reqs)
209        : $(name) ]
210    ;
211}
212
213rule clang-thread-safety ( properties * )
214{
215    if <toolset>clang in $(properties)
216    {
217        return <cxxflags>-Werror=thread-safety  <define>BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS ;
218    }
219    else
220    {
221        return <build>no ;
222    }
223}
224
225rule thread-safety-compile ( sources : reqs * : name )
226{
227    return
228    [ compile $(sources)
229        : $(reqs) <conditional>@clang-thread-safety
230        : $(name) ]
231    ;
232}
233
234rule thread-safety-compile-fail ( sources : reqs * : name )
235{
236    return
237    [ compile-fail $(sources)
238        : $(reqs) <conditional>@clang-thread-safety
239        : $(name) ]
240    ;
241}
242
243rule thread-compile ( sources : reqs * : name )
244{
245    return
246    [ compile $(sources)
247        : $(reqs)
248        : $(name) ]
249    ;
250}
251
252rule windows-cygwin-specific ( properties * )
253{
254    if <target-os>windows in $(properties) || <target-os>cygwin in $(properties)
255    {
256        return <build>yes ;
257    }
258    else
259    {
260        return <build>no ;
261    }
262}
263
264rule generate_self_contained_header_tests
265{
266    local all_rules ;
267    local file ;
268
269    if ! [ os.environ BOOST_THREAD_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS ]
270    {
271        local headers_path = [ path.make $(BOOST_ROOT)/libs/thread/include/boost/thread ] ;
272        for file in [ path.glob-tree $(headers_path) : *.hpp : detail pthread win32 ]
273        {
274            local rel_file = [ path.relative-to $(headers_path) $(file) ] ;
275            # Note: The test name starts with '~' in order to group these tests in the test report table, preferably at the end.
276            #       All '/' are replaced with '-' because apparently test scripts have a problem with test names containing slashes.
277            local test_name = [ regex.replace ~hdr/$(rel_file) "/" "-" ] ;
278            #ECHO $(rel_file) ;
279            all_rules += [ compile self_contained_header.cpp : <define>"BOOST_THREAD_TEST_HEADER=$(rel_file)" <dependency>$(file) : $(test_name) ] ;
280            all_rules += [ compile self_contained_header.cpp : <define>"BOOST_THREAD_TEST_HEADER=$(rel_file)" <define>"BOOST_THREAD_TEST_POST_WINDOWS_H" <dependency>$(file) <conditional>@windows-cygwin-specific : $(test_name)-post_winh ] ;
281        }
282    }
283
284    #ECHO All rules: $(all_rules) ;
285    return $(all_rules) ;
286}
287
288{
289    test-suite t_threads
290    :
291          [ thread-test test_thread.cpp ]
292          [ thread-test test_thread_id.cpp ]
293          [ thread-test test_hardware_concurrency.cpp ]
294          [ thread-test test_physical_concurrency.cpp ]
295          [ thread-test test_thread_move.cpp ]
296          [ thread-test test_thread_return_local.cpp ]
297          [ thread-test test_thread_move_return.cpp ]
298          [ thread-test test_thread_launching.cpp ]
299          [ thread-test test_thread_mf.cpp ]
300          [ thread-test test_thread_exit.cpp ]
301          [ thread-test test_move_function.cpp ]
302          [ compile-fail no_implicit_move_from_lvalue_thread.cpp ]
303          [ compile-fail no_implicit_assign_from_lvalue_thread.cpp ]
304          [ thread-test test_tss.cpp ]
305          [ thread-test test_xtime.cpp ]
306    ;
307
308    test-suite t_sync
309    :
310          [ thread-test test_mutex.cpp ]
311          [ thread-test test_condition_notify_one.cpp ]
312          [ thread-test test_condition_timed_wait_times_out.cpp ]
313          [ thread-test test_condition_notify_all.cpp ]
314          [ thread-test test_condition.cpp ]
315          [ thread-test test_once.cpp ]
316          [ thread-run test_barrier.cpp ]
317          [ thread-run test_barrier_void_fct.cpp ]
318          [ thread-run test_barrier_size_fct.cpp ]
319          [ thread-test test_lock_concept.cpp ]
320          [ thread-test test_generic_locks.cpp ]
321          [ thread-run  test_latch.cpp ]
322          [ thread-run  test_completion_latch.cpp ]
323    ;
324
325    test-suite t_shared
326    :
327          [ thread-test test_shared_mutex.cpp ]
328          [ thread-test test_shared_mutex_part_2.cpp ]
329          [ thread-test test_shared_mutex_timed_locks.cpp ]
330          [ thread-test test_shared_mutex_timed_locks_chrono.cpp ]
331          #uncomment the following once these works on windows
332          #[ thread-test test_vhh_shared_mutex.cpp ]
333          #[ thread-test test_vhh_shared_mutex_part_2.cpp ]
334          #[ thread-test test_vhh_shared_mutex_timed_locks.cpp ]
335    ;
336
337    explicit t_futures_too_long ;
338    test-suite t_futures_too_long
339    :
340          [ thread-test test_futures.cpp ]
341    ;
342
343
344    #explicit tickets ;
345    test-suite tickets
346    :
347          [ thread-test test_2309.cpp ]
348          [ thread-run test_2501.cpp ]
349          [ thread-test test_2741.cpp ]
350          [ thread-run test_3628.cpp ]
351          [ thread-run test_4521.cpp ]
352          [ thread-run test_4648.cpp ]
353          [ thread-run test_4882.cpp ]
354          [ thread-run test_5542_1.cpp ]
355          [ thread-run test_5542_2.cpp ]
356          [ thread-run test_5542_3.cpp ]
357          [ thread-run test_5891.cpp ]
358          #[ thread-run test_6130.cpp ]
359          #[ thread-run test_6170.cpp ]
360          [ thread-run test_6174.cpp ]
361          #[ thread-run test_7160.cpp ]
362          [ thread-run test_7328.cpp ]
363          [ thread-run test_7571.cpp ]
364          [ thread-run test_9319.cpp ]
365          #[ thread-run test_9711.cpp ] This is an invalid use of ::then deferred.
366          [ thread-run test_9856.cpp ]
367          [ thread-compile test_10963.cpp : : test_10963_c ]
368          [ thread-run test_10964.cpp ]
369          [ thread-test test_11053.cpp ]
370          [ thread-run test_11266.cpp ]
371    ;
372
373
374    explicit oth_tickets ;
375    test-suite oth_tickets
376    :
377          [ thread-run test_5351.cpp ]
378          [ thread-run test_5502.cpp ]
379    ;
380
381
382
383    #explicit ts_conditions ;
384    test-suite ts_conditions
385    :
386          [ thread-compile-fail ./sync/conditions/condition_variable/assign_fail.cpp : : condition_variable__assign_f ]
387          [ thread-compile-fail ./sync/conditions/condition_variable/copy_fail.cpp : : condition_variable__copy_f ]
388          [ thread-run2-noit ./sync/conditions/condition_variable/default_pass.cpp : condition_variable__default_p ]
389          [ thread-run2-noit ./sync/conditions/condition_variable/dtor_pass.cpp : condition_variable__dtor_p ]
390          [ thread-run2-noit-pthread ./sync/conditions/condition_variable/native_handle_pass.cpp : condition_variable__native_handle_p ]
391          [ thread-run2-noit ./sync/conditions/condition_variable/wait_pass.cpp : condition_variable__wait_p ]
392          [ thread-run2-noit ./sync/conditions/condition_variable/wait_for_pass.cpp : condition_variable__wait_for_p ]
393          [ thread-run2-noit ./sync/conditions/condition_variable/wait_for_pred_pass.cpp : condition_variable__wait_for_pred_p ]
394          [ thread-run2-noit ./sync/conditions/condition_variable/wait_until_pass.cpp : condition_variable__wait_until_p ]
395          [ thread-run2-noit ./sync/conditions/condition_variable/wait_until_pred_pass.cpp : condition_variable__wait_until_pred_p ]
396          [ thread-run2-noit ./sync/conditions/condition_variable/lost_notif_pass.cpp : condition_variable__lost_notif_p ]
397
398          [ thread-compile-fail ./sync/conditions/condition_variable_any/assign_fail.cpp : : condition_variable_any__assign_f ]
399          [ thread-compile-fail ./sync/conditions/condition_variable_any/copy_fail.cpp : : condition_variable_any__copy_f ]
400          [ thread-run2-noit ./sync/conditions/condition_variable_any/default_pass.cpp : condition_variable_any__default_p ]
401          [ thread-run2-noit ./sync/conditions/condition_variable_any/dtor_pass.cpp : condition_variable_any__dtor_p ]
402          [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_for_pass.cpp : condition_variable_any__wait_for_p ]
403          [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_for_pred_pass.cpp : condition_variable_any__wait_for_pred_p ]
404          [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_until_pass.cpp : condition_variable_any__wait_until_p ]
405          [ thread-run2-noit ./sync/conditions/condition_variable_any/wait_until_pred_pass.cpp : condition_variable_any__wait_until_pred_p ]
406          [ thread-run2-noit ./sync/conditions/condition_variable_any/lost_notif_pass.cpp : condition_variable_any__lost_notif_p ]
407          [ thread-run2-noit ./sync/conditions/cv_status/cv_status_pass.cpp : cv_status__cv_status_p ]
408          [ thread-run2-noit ./sync/conditions/notify_all_at_thread_exit_pass.cpp : notify_all_at_thread_exit_p ]
409    ;
410
411    #explicit ts_async ;
412    test-suite ts_async
413    :
414          [ thread-run2-noit ./sync/futures/async/async_pass.cpp : async__async_p ]
415          [ thread-run2-noit ./sync/futures/async/async_executor_pass.cpp : async__async_executor_p ]
416    ;
417
418    #explicit ts_promise ;
419    test-suite ts_promise
420    :
421          [ thread-compile-fail ./sync/futures/promise/copy_assign_fail.cpp : : promise__copy_assign_f ]
422          [ thread-compile-fail ./sync/futures/promise/copy_ctor_fail.cpp : : promise__copy_ctor_f ]
423          [ thread-run2-noit ./sync/futures/promise/alloc_ctor_pass.cpp : promise__alloc_ctor_p ]
424          [ thread-run2-noit ./sync/futures/promise/default_pass.cpp : promise__default_p ]
425          [ thread-run2-noit ./sync/futures/promise/dtor_pass.cpp : promise__dtor_p ]
426          [ thread-run2-noit ./sync/futures/promise/get_future_pass.cpp : promise__get_future_p ]
427          [ thread-run2-noit ./sync/futures/promise/move_ctor_pass.cpp : promise__move_ctor_p ]
428          [ thread-run2-noit ./sync/futures/promise/move_assign_pass.cpp : promise__move_asign_p ]
429          [ thread-run2-noit ./sync/futures/promise/set_exception_pass.cpp : promise__set_exception_p ]
430          [ thread-run2-noit ./sync/futures/promise/set_lvalue_pass.cpp : promise__set_lvalue_p ]
431          [ thread-run2-noit ./sync/futures/promise/set_rvalue_pass.cpp : promise__set_rvalue_p ]
432          [ thread-run2-noit ./sync/futures/promise/set_value_const_pass.cpp : promise__set_value_const_p ]
433          [ thread-run2-noit ./sync/futures/promise/set_value_void_pass.cpp : promise__set_value_void_p ]
434          [ thread-run2-noit ./sync/futures/promise/emplace_pass.cpp : promise__emplace_p ]
435          [ thread-run2-noit ./sync/futures/promise/use_allocator_pass.cpp : promise__use_allocator_p ]
436          [ thread-run2-noit ./sync/futures/promise/set_exception_at_thread_exit_pass.cpp : promise__set_exception_at_thread_exit_p ]
437          [ thread-run2-noit ./sync/futures/promise/set_lvalue_at_thread_exit_pass.cpp : promise__set_lvalue_at_thread_exit_p ]
438          [ thread-run2-noit ./sync/futures/promise/set_rvalue_at_thread_exit_pass.cpp : promise__set_rvalue_at_thread_exit_p ]
439          [ thread-run2-noit ./sync/futures/promise/set_value_at_thread_exit_const_pass.cpp : promise__set_value_at_thread_exit_const_p ]
440          [ thread-run2-noit ./sync/futures/promise/set_value_at_thread_exit_void_pass.cpp : promise__set_value_at_thread_exit_void_p ]
441    ;
442
443    #explicit ts_make_ready_future ;
444    test-suite ts_make_ready_future
445    :
446          [ thread-run2-noit ./sync/futures/make_ready_future_pass.cpp : make_ready_future_p ]
447    ;
448
449    #explicit ts_future ;
450    test-suite ts_future
451    :
452          [ thread-compile-fail ./sync/futures/future/copy_assign_fail.cpp : : future__copy_assign_f ]
453          [ thread-compile-fail ./sync/futures/future/copy_ctor_fail.cpp : : future__copy_ctor_f ]
454          [ thread-run2-noit ./sync/futures/future/default_pass.cpp : future__default_p ]
455          [ thread-run2-noit ./sync/futures/future/dtor_pass.cpp : future__dtor_p ]
456          [ thread-run2-noit ./sync/futures/future/get_pass.cpp : future__get_p ]
457          [ thread-run2-noit ./sync/futures/future/get_or_pass.cpp : future__get_or_p ]
458          [ thread-run2-noit ./sync/futures/future/move_ctor_pass.cpp : future__move_ctor_p ]
459          [ thread-run2-noit ./sync/futures/future/move_assign_pass.cpp : future__move_asign_p ]
460          [ thread-run2-noit ./sync/futures/future/share_pass.cpp : future__share_p ]
461          [ thread-run2-noit ./sync/futures/future/wait_pass.cpp : future__wait_p ]
462          [ thread-run2-noit ./sync/futures/future/wait_for_pass.cpp : future__wait_for_p ]
463          [ thread-run2-noit ./sync/futures/future/wait_until_pass.cpp : future__wait_until_p ]
464          [ thread-run2-noit ./sync/futures/future/then_pass.cpp : future__then_p ]
465          [ thread-run2-noit ./sync/futures/future/then_executor_pass.cpp : future__then_executor_p ]
466          [ thread-run2-noit ./sync/futures/future/async_deferred_then_pass.cpp : future__async_def_then_p ]
467          [ thread-run2-noit ./sync/futures/future/then_deferred_pass.cpp : future__then_def_p ]
468    ;
469
470    #explicit ts_shared_future ;
471    test-suite ts_shared_future
472    :
473          [ thread-run2-noit ./sync/futures/shared_future/copy_assign_pass.cpp : shared_future__copy_assign_p ]
474          [ thread-run2-noit ./sync/futures/shared_future/copy_ctor_pass.cpp : shared_future__copy_ctor_p ]
475          [ thread-run2-noit ./sync/futures/shared_future/default_pass.cpp : shared_future__default_p ]
476          [ thread-run2-noit ./sync/futures/shared_future/dtor_pass.cpp : shared_future__dtor_p ]
477          [ thread-run2-noit ./sync/futures/shared_future/get_pass.cpp : shared_future__get_p ]
478          [ thread-run2-noit ./sync/futures/shared_future/move_ctor_pass.cpp : shared_future__move_ctor_p ]
479          [ thread-run2-noit ./sync/futures/shared_future/move_assign_pass.cpp : shared_future__move_asign_p ]
480          [ thread-run2-noit ./sync/futures/shared_future/wait_pass.cpp : shared_future__wait_p ]
481          [ thread-run2-noit ./sync/futures/shared_future/wait_for_pass.cpp : shared_future__wait_for_p ]
482          [ thread-run2-noit ./sync/futures/shared_future/wait_until_pass.cpp : shared_future__wait_until_p ]
483          [ thread-run2-noit ./sync/futures/shared_future/then_pass.cpp : shared_future__then_p ]
484          [ thread-run2-noit ./sync/futures/shared_future/then_executor_pass.cpp : shared_future__then_executor_p ]
485    ;
486
487    #explicit ts_packaged_task ;
488    test-suite ts_packaged_task
489    :
490          [ thread-run2-noit ./sync/futures/packaged_task/alloc_ctor_pass.cpp : packaged_task__alloc_ctor_p ]
491          [ thread-compile-fail ./sync/futures/packaged_task/copy_assign_fail.cpp : : packaged_task__copy_assign_f ]
492          [ thread-compile-fail ./sync/futures/packaged_task/copy_ctor_fail.cpp : : packaged_task__copy_ctor_f ]
493          [ thread-run2-noit ./sync/futures/packaged_task/default_ctor_pass.cpp : packaged_task__default_ctor_p ]
494          [ thread-run2-noit ./sync/futures/packaged_task/func_ctor_pass.cpp : packaged_task__func_ctor_p ]
495          [ thread-run2-noit ./sync/futures/packaged_task/dtor_pass.cpp : packaged_task__dtor_p ]
496          [ thread-run2-noit ./sync/futures/packaged_task/get_future_pass.cpp : packaged_task__get_future_p ]
497          [ thread-run2-noit ./sync/futures/packaged_task/move_ctor_pass.cpp : packaged_task__move_ctor_p ]
498          [ thread-run2-noit ./sync/futures/packaged_task/move_assign_pass.cpp : packaged_task__move_asign_p ]
499          [ thread-run2-noit ./sync/futures/packaged_task/operator_pass.cpp : packaged_task__operator_p ]
500          [ thread-run2-noit ./sync/futures/packaged_task/reset_pass.cpp : packaged_task__reset_p ]
501          [ thread-run2-noit ./sync/futures/packaged_task/use_allocator_pass.cpp : packaged_task__use_allocator_p ]
502          [ thread-run2-noit ./sync/futures/packaged_task/types_pass.cpp : packaged_task__types_p ]
503          [ thread-run2-noit ./sync/futures/packaged_task/member_swap_pass.cpp : packaged_task__member_swap_p ]
504          [ thread-run2-noit ./sync/futures/packaged_task/non_member_swap_pass.cpp : packaged_task__non_member_swap_p ]
505          [ thread-run2-noit ./sync/futures/packaged_task/make_ready_at_thread_exit_pass.cpp : packaged_task__make_ready_at_thread_exit_p ]
506    ;
507
508
509    #explicit ts_when_all ;
510    test-suite ts_when_all
511    :
512          [ thread-run2-noit ./sync/futures/when_all/none_pass.cpp : when_all__none_p ]
513          [ thread-run2-noit ./sync/futures/when_all/one_pass.cpp : when_all__one_p ]
514          [ thread-run2-noit ./sync/futures/when_all/iterators_pass.cpp : when_all__iterators_p ]
515          [ thread-run2-noit ./sync/futures/when_all/variadic_pass.cpp : when_all__variadic_p ]
516    ;
517
518    #explicit ts_when_any ;
519    test-suite ts_when_any
520    :
521          [ thread-run2-noit ./sync/futures/when_any/none_pass.cpp : when_any__none_p ]
522          [ thread-run2-noit ./sync/futures/when_any/one_pass.cpp : when_any__one_p ]
523          [ thread-run2-noit ./sync/futures/when_any/iterators_pass.cpp : when_any__iterators_p ]
524          [ thread-run2-noit ./sync/futures/when_any/variadic_pass.cpp : when_any__variadic_p ]
525    ;
526
527    #explicit ts_lock_guard ;
528    test-suite ts_lock_guard
529    :
530          [ thread-compile-fail ./sync/mutual_exclusion/locks/lock_guard/copy_assign_fail.cpp : : lock_guard__cons__copy_assign_f ]
531          [ thread-compile-fail ./sync/mutual_exclusion/locks/lock_guard/copy_ctor_fail.cpp : : lock_guard__cons__copy_ctor_f ]
532          [ thread-safety-compile ./sync/mutual_exclusion/locks/lock_guard/lock_guard_compile_pass.cpp : : lock_guard__lock_compile_p ]
533          [ thread-safety-compile-fail ./sync/mutual_exclusion/locks/lock_guard/lock_guard_compile_fail.cpp : : lock_guard__lock_compile_f ]
534          [ thread-safety-compile ./sync/mutual_exclusion/locks/lock_guard/lock_guard_adopt_lock_compile_pass.cpp : : lock_guard__adopt_lock_compile_p ]
535          [ thread-safety-compile-fail ./sync/mutual_exclusion/locks/lock_guard/lock_guard_adopt_lock_compile_fail.cpp : : lock_guard__adopt_lock_compile_f ]
536          [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/adopt_lock_pass.cpp : lock_guard__cons__adopt_lock_p ]
537          [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/default_pass.cpp : lock_guard__cons__default_p ]
538          [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/types_pass.cpp : lock_guard__types_p ]
539          [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/make_lock_guard_pass.cpp : make_lock_guard_p ]
540          [ thread-run2-noit ./sync/mutual_exclusion/locks/lock_guard/make_lock_guard_adopt_lock_pass.cpp : make_lock_guard__adopt_lock_p ]
541    ;
542
543    #explicit ts_unique_lock ;
544    test-suite ts_unique_lock
545    :
546          [ thread-compile-fail ./sync/mutual_exclusion/locks/unique_lock/cons/copy_assign_fail.cpp : : unique_lock__cons__copy_assign_f ]
547          [ thread-compile-fail ./sync/mutual_exclusion/locks/unique_lock/cons/copy_ctor_fail.cpp : : unique_lock__cons__copy_ctor_f ]
548          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/adopt_lock_pass.cpp : unique_lock__cons__adopt_lock_p ]
549          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/default_pass.cpp : unique_lock__cons__default_p ]
550          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/defer_lock_pass.cpp : unique_lock__cons__defer_lock_p ]
551          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/duration_pass.cpp : unique_lock__cons__duration_p ]
552          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_assign_pass.cpp : unique_lock__cons__move_assign_p ]
553          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_pass.cpp : unique_lock__cons__move_ctor_p ]
554          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_pass.cpp : uq_lk_cons_mv_c_upg_lk_p ]
555          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_try_pass.cpp : uq_lk_cons_mv_c_upg_lk_t_p ]
556          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_for_pass.cpp : uq_lk_cons_mv_c_upg_lk_f_p ]
557          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_upgrade_lock_until_pass.cpp : uq_lk_cons_mv_c_upg_lk_u_p ]
558          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/mutex_pass.cpp : unique_lock__cons__mutex_p ]
559          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/time_point_pass.cpp : unique_lock__cons__time_point_p ]
560          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/try_to_lock_pass.cpp : unique_lock__cons__try_to_lock_p ]
561          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/lock_pass.cpp : unique_lock__lock_p ]
562          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_for_pass.cpp : unique_lock__try_lock_for_p ]
563          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_pass.cpp : unique_lock__try_lock_p ]
564          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/try_lock_until_pass.cpp : unique_lock__try_lock_until_p ]
565          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/locking/unlock_pass.cpp : unique_lock__unlock_p ]
566          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/mod/member_swap_pass.cpp : unique_lock__member_swap_p ]
567          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/mod/non_member_swap_pass.cpp : unique_lock__non_member_swap_p ]
568          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/mod/release_pass.cpp : unique_lock__release_p ]
569          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/obs/mutex_pass.cpp : unique_lock__mutex_p ]
570          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/obs/op_bool_pass.cpp : unique_lock__op_bool_p ]
571          #[ thread-compile-fail ./sync/mutual_exclusion/locks/unique_lock/obs/op_int_fail.cpp : : unique_lock__op_int_f ]
572          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/obs/owns_lock_pass.cpp : unique_lock__owns_lock_p ]
573          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/types_pass.cpp : unique_lock__types_p ]
574
575
576    ;
577
578    #explicit ts_make_unique_lock ;
579    test-suite ts_make_unique_lock
580    :
581          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_mutex_pass.cpp : make_unique_lock__mutex_p ]
582          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_adopt_lock_pass.cpp : make_unique_lock__adopt_lock_p ]
583          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_defer_lock_pass.cpp : make_unique_lock__defer_lock_p ]
584          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_lock_try_to_lock_pass.cpp : make_unique_lock__try_to_lock_p ]
585
586          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/make_unique_locks_mutex_pass.cpp : make_unique_locks__mutex_p ]
587
588    ;
589
590    #explicit ts_shared_lock ;
591    test-suite ts_shared_lock
592    :
593          [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock/cons/copy_assign_fail.cpp : : shared_lock__cons__copy_assign_f ]
594          [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock/cons/copy_ctor_fail.cpp : : shared_lock__cons__copy_ctor_f ]
595          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/adopt_lock_pass.cpp : shared_lock__cons__adopt_lock_p ]
596          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : shared_lock__cons__default_p ]
597          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : shared_lock__cons__defer_lock_p ]
598          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/duration_pass.cpp : shared_lock__cons__duration_p ]
599          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_assign_pass.cpp : shared_lock__cons__move_assign_p ]
600          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_pass.cpp : shared_lock__cons__move_ctor_p ]
601          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_unique_lock_pass.cpp : sh_lock_cons_move_ctor_unq_lock_p ]
602          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/move_ctor_upgrade_lock_pass.cpp : sh_lock_cons_move_ctor_upg_lock_p ]
603          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/mutex_pass.cpp : shared_lock__cons__mutex_p ]
604          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/time_point_pass.cpp : shared_lock__cons__time_point_p ]
605          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/cons/try_to_lock_pass.cpp : shared_lock__cons__try_to_lock_p ]
606          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/lock_pass.cpp : shared_lock__lock_p ]
607          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_for_pass.cpp : shared_lock__try_lock_for_p ]
608          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_pass.cpp : shared_lock__try_lock_p ]
609          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/try_lock_until_pass.cpp : shared_lock__try_lock_until_p ]
610          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/locking/unlock_pass.cpp : shared_lock__unlock_p ]
611          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/mod/member_swap_pass.cpp : shared_lock__member_swap_p ]
612          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/mod/non_member_swap_pass.cpp : shared_lock__non_member_swap_p ]
613          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/mod/release_pass.cpp : shared_lock__release_p ]
614          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/obs/mutex_pass.cpp : shared_lock__mutex_p ]
615          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/obs/op_bool_pass.cpp : shared_lock__op_bool_p ]
616          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/obs/owns_lock_pass.cpp : shared_lock__owns_lock_p ]
617          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock/types_pass.cpp : shared_lock__types_p ]
618
619          #[ thread-run2-h ./sync/mutual_exclusion/locks/shared_lock/cons/default_pass.cpp : shared_lock__cons__default_p ]
620          #[ thread-run2-h ./sync/mutual_exclusion/locks/shared_lock/cons/defer_lock_pass.cpp : shared_lock__cons__defer_lock_p ]
621
622    ;
623
624    #explicit ts_upgrade_lock ;
625    test-suite ts_upgrade_lock
626    :
627          [ thread-compile-fail ./sync/mutual_exclusion/locks/upgrade_lock/cons/copy_assign_fail.cpp : : upgrade_lock__cons__copy_assign_f ]
628          [ thread-compile-fail ./sync/mutual_exclusion/locks/upgrade_lock/cons/copy_ctor_fail.cpp : : upgrade_lock__cons__copy_ctor_f ]
629          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/adopt_lock_pass.cpp : upgrade_lock__cons__adopt_lock_p ]
630          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/default_pass.cpp : upgrade_lock__cons__default_p ]
631          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/defer_lock_pass.cpp : upgrade_lock__cons__defer_lock_p ]
632          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/duration_pass.cpp : upgrade_lock__cons__duration_p ]
633          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_assign_pass.cpp : upgrade_lock__cons__move_assign_p ]
634          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_pass.cpp : upgrade_lock__cons__move_ctor_p ]
635          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_unique_lock_pass.cpp : upg_lock_cons_mv_ctor_uq_lock_p ]
636          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/mutex_pass.cpp : upgrade_lock__cons__mutex_p ]
637          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/time_point_pass.cpp : upgrade_lock__cons__time_point_p ]
638          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/try_to_lock_pass.cpp : upgrade_lock__cons__try_to_lock_p ]
639          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/lock_pass.cpp : upgrade_lock__lock_p ]
640          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_for_pass.cpp : upgrade_lock__try_lock_for_p ]
641          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_pass.cpp : upgrade_lock__try_lock_p ]
642          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/try_lock_until_pass.cpp : upgrade_lock__try_lock_until_p ]
643          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/locking/unlock_pass.cpp : upgrade_lock__unlock_p ]
644          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/mod/member_swap_pass.cpp : upgrade_lock__member_swap_p ]
645          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/mod/non_member_swap_pass.cpp : upgrade_lock__non_member_swap_p ]
646          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/mod/release_pass.cpp : upgrade_lock__release_p ]
647          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/obs/mutex_pass.cpp : upgrade_lock__mutex_p ]
648          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/obs/op_bool_pass.cpp : upgrade_lock__op_bool_p ]
649          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/obs/owns_lock_pass.cpp : upgrade_lock__owns_lock_p ]
650          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/types_pass.cpp : upgrade_lock__types_p ]
651    ;
652
653    #explicit ts_strict_lock ;
654    test-suite ts_strict_lock
655    :
656          [ thread-compile-fail ./sync/mutual_exclusion/locks/strict_lock/copy_assign_fail.cpp : : strict_lock__cons__copy_assign_f ]
657          [ thread-compile-fail ./sync/mutual_exclusion/locks/strict_lock/copy_ctor_fail.cpp : : strict_lock__cons__copy_ctor_f ]
658          [ thread-run2-noit ./sync/mutual_exclusion/locks/strict_lock/default_pass.cpp : strict_lock__cons__default_p ]
659          [ thread-run2-noit ./sync/mutual_exclusion/locks/strict_lock/owns_lock_pass.cpp : strict_lock__owns_lock_p ]
660          [ thread-run2-noit ./sync/mutual_exclusion/locks/strict_lock/types_pass.cpp : strict_lock__types_p ]
661          [ thread-run2-noit ./sync/mutual_exclusion/locks/strict_lock/make_strict_lock_pass.cpp : make_strict_lock_p ]
662    ;
663
664    #explicit ts_nested_strict_lock ;
665    test-suite ts_nested_strict_lock
666    :
667          [ thread-compile-fail ./sync/mutual_exclusion/locks/nested_strict_lock/copy_assign_fail.cpp : : nested_strict_lock_cons_copy_assign_f ]
668          [ thread-compile-fail ./sync/mutual_exclusion/locks/nested_strict_lock/copy_ctor_fail.cpp : : nested_strict_lock_cons_copy_ctor_f ]
669          [ thread-run2-noit ./sync/mutual_exclusion/locks/nested_strict_lock/default_pass.cpp : nested_strict_lock__cons__default_p ]
670          [ thread-run2-noit ./sync/mutual_exclusion/locks/nested_strict_lock/owns_lock_pass.cpp : nested_strict_lock__owns_lock_p ]
671          [ thread-run2-noit ./sync/mutual_exclusion/locks/nested_strict_lock/types_pass.cpp : nested_strict_lock__types_p ]
672          [ thread-run2-noit ./sync/mutual_exclusion/locks/nested_strict_lock/make_nested_strict_lock_pass.cpp : make_nested_strict_lock_p ]
673    ;
674
675
676    #explicit ts_once ;
677    test-suite ts_once
678    :
679          #[ thread-compile-fail ./sync/mutual_exclusion/once/once_flag/assign_fail.cpp : : once_flag__assign_f ]
680          #[ thread-compile-fail ./sync/mutual_exclusion/once/once_flag/copy_fail.cpp : : once_flag__copy_f ]
681          #[ thread-run2-noit ./sync/mutual_exclusion/once/once_flag/default_pass.cpp : once_flag__default_p ]
682          [ thread-run2-noit ./sync/mutual_exclusion/once/call_once/call_once_pass.cpp : call_once_p ]
683    ;
684
685    #explicit ts_mutex ;
686    test-suite ts_mutex
687    :
688          [ thread-compile-fail ./sync/mutual_exclusion/mutex/assign_fail.cpp : : mutex__assign_f ]
689          [ thread-compile-fail ./sync/mutual_exclusion/mutex/copy_fail.cpp : : mutex__copy_f ]
690          [ thread-safety-compile ./sync/mutual_exclusion/mutex/lock_compile_pass.cpp : : mutex__lock_compile_p ]
691          [ thread-safety-compile-fail ./sync/mutual_exclusion/mutex/lock_compile_fail.cpp : : mutex__lock_compile_f ]
692          # https://bugs.llvm.org/show_bug.cgi?id=32954
693          # http://clang-developers.42468.n3.nabble.com/thread-safety-warnings-specifically-try-acquire-capability-td4059337.html
694          #[ thread-safety-compile ./sync/mutual_exclusion/mutex/try_lock_compile_pass.cpp : : mutex__try_lock_compile_p ]
695          [ thread-safety-compile-fail ./sync/mutual_exclusion/mutex/try_lock_compile_fail.cpp : : mutex__try_lock_compile_f ]
696          [ thread-run2-noit ./sync/mutual_exclusion/mutex/default_pass.cpp : mutex__default_p ]
697          [ thread-run2-noit ./sync/mutual_exclusion/mutex/lock_pass.cpp : mutex__lock_p ]
698          [ thread-run2-noit-pthread ./sync/mutual_exclusion/mutex/native_handle_pass.cpp : mutex__native_handle_p ]
699          [ thread-run2-noit ./sync/mutual_exclusion/mutex/try_lock_pass.cpp : mutex__try_lock_p ]
700    ;
701
702    #explicit ts_recursive_mutex ;
703    test-suite ts_recursive_mutex
704    :
705          [ thread-compile-fail ./sync/mutual_exclusion/recursive_mutex/assign_fail.cpp : : recursive_mutex__assign_f ]
706          [ thread-compile-fail ./sync/mutual_exclusion/recursive_mutex/copy_fail.cpp : : recursive_mutex__copy_f ]
707          [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/default_pass.cpp : recursive_mutex__default_p ]
708          [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/lock_pass.cpp : recursive_mutex__lock_p ]
709          [ thread-run2-noit-pthread ./sync/mutual_exclusion/recursive_mutex/native_handle_pass.cpp : recursive_mutex__native_handle_p ]
710          [ thread-run2-noit ./sync/mutual_exclusion/recursive_mutex/try_lock_pass.cpp : recursive_mutex__try_lock_p ]
711    ;
712
713    #explicit ts_recursive_timed_mutex ;
714    test-suite ts_recursive_timed_mutex
715    :
716          [ thread-compile-fail ./sync/mutual_exclusion/recursive_timed_mutex/assign_fail.cpp : : recursive_timed_mutex__assign_f ]
717          [ thread-compile-fail ./sync/mutual_exclusion/recursive_timed_mutex/copy_fail.cpp : : recursive_timed_mutex__copy_f ]
718          [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/default_pass.cpp : recursive_timed_mutex__default_p ]
719          [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/lock_pass.cpp : recursive_timed_mutex__lock_p ]
720          [ thread-run2-noit-pthread ./sync/mutual_exclusion/recursive_timed_mutex/native_handle_pass.cpp : rec_timed_mutex_native_handle_p ]
721          [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_for_pass.cpp : rec_timed_mutex_try_lock_for_p ]
722          [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_pass.cpp : recursive_timed_mutex__try_lock_p ]
723          [ thread-run2-noit ./sync/mutual_exclusion/recursive_timed_mutex/try_lock_until_pass.cpp : rec_timed_mutex_try_lock_until_p ]
724    ;
725
726    #explicit ts_timed_mutex ;
727    test-suite ts_timed_mutex
728    :
729          [ thread-compile-fail ./sync/mutual_exclusion/timed_mutex/assign_fail.cpp : : timed_mutex__assign_f ]
730          [ thread-compile-fail ./sync/mutual_exclusion/timed_mutex/copy_fail.cpp : : timed_mutex__copy_f ]
731          [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/default_pass.cpp : timed_mutex__default_p ]
732          [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/lock_pass.cpp : timed_mutex__lock_p ]
733          [ thread-run2-noit-pthread ./sync/mutual_exclusion/timed_mutex/native_handle_pass.cpp : timed_mutex__native_handle_p ]
734          [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/try_lock_for_pass.cpp : timed_mutex__try_lock_for_p ]
735          [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/try_lock_pass.cpp : timed_mutex__try_lock_p ]
736          [ thread-run2-noit ./sync/mutual_exclusion/timed_mutex/try_lock_until_pass.cpp : timed_mutex__try_lock_until_p ]
737    ;
738
739    #explicit ts_shared_mutex ;
740    test-suite ts_shared_mutex
741    :
742          [ thread-compile-fail ./sync/mutual_exclusion/shared_mutex/assign_fail.cpp : : shared_mutex__assign_f ]
743          [ thread-compile-fail ./sync/mutual_exclusion/shared_mutex/copy_fail.cpp : : shared_mutex__copy_f ]
744          [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : shared_mutex__default_p ]
745          [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/lock_pass.cpp : shared_mutex__lock_p ]
746          [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/try_lock_for_pass.cpp : shared_mutex__try_lock_for_p ]
747          [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/try_lock_pass.cpp : shared_mutex__try_lock_p ]
748          [ thread-run2-noit ./sync/mutual_exclusion/shared_mutex/try_lock_until_pass.cpp : shared_mutex__try_lock_until_p ]
749
750          #[ thread-run2-h ./sync/mutual_exclusion/shared_mutex/default_pass.cpp : shared_mutex__default_p ]
751    ;
752
753    #explicit ts_null_mutex ;
754    test-suite ts_null_mutex
755    :
756          [ thread-compile-fail ./sync/mutual_exclusion/null_mutex/assign_fail.cpp : : null_mutex__assign_f ]
757          [ thread-compile-fail ./sync/mutual_exclusion/null_mutex/copy_fail.cpp : : null_mutex__copy_f ]
758          [ thread-run2-noit ./sync/mutual_exclusion/null_mutex/default_pass.cpp : null_mutex__default_p ]
759          [ thread-run2-noit ./sync/mutual_exclusion/null_mutex/lock_pass.cpp : null_mutex__lock_p ]
760          [ thread-run2-noit ./sync/mutual_exclusion/null_mutex/try_lock_for_pass.cpp : null_mutex__try_lock_for_p ]
761          [ thread-run2-noit ./sync/mutual_exclusion/null_mutex/try_lock_pass.cpp : null_mutex__try_lock_p ]
762          [ thread-run2-noit ./sync/mutual_exclusion/null_mutex/try_lock_until_pass.cpp : null_mutex__try_lock_until_p ]
763    ;
764
765    test-suite ts_sync_queue
766    :
767          [ thread-run2-noit ./sync/mutual_exclusion/sync_queue/single_thread_pass.cpp : sync_queue__single_thread_p ]
768          [ thread-run2-noit ./sync/mutual_exclusion/sync_queue/multi_thread_pass.cpp : sync_queue__multi_thread_p ]
769    ;
770
771    test-suite ts_sync_deque
772    :
773          [ thread-run2-noit ./sync/mutual_exclusion/sync_deque/single_thread_pass.cpp : sync_deque__single_thread_p ]
774          [ thread-run2-noit ./sync/mutual_exclusion/sync_deque/multi_thread_pass.cpp : sync_deque__multi_thread_p ]
775    ;
776
777    test-suite ts_sync_bounded_queue
778    :
779          [ thread-run2-noit ./sync/mutual_exclusion/sync_bounded_queue/single_thread_pass.cpp : sync_bounded_q_single_thread_p ]
780          [ thread-run2-noit ./sync/mutual_exclusion/sync_bounded_queue/multi_thread_pass.cpp : sync_bounded_q_multi_thread_p ]
781    ;
782
783    test-suite ts_sync_pq
784    :
785          [ thread-run2-noit ./sync/mutual_exclusion/sync_pq/pq_single_thread_pass.cpp : sync_pq_single_thread_p ]
786          [ thread-run2-noit ./sync/mutual_exclusion/sync_pq/pq_multi_thread_pass.cpp : sync_pq_multi_thread_p ]
787    ;
788
789    test-suite ts_sync_tq
790    :
791          [ thread-run2-noit ./sync/mutual_exclusion/sync_pq/tq_single_thread_pass.cpp : sync_tq_single_thread_p ]
792          [ thread-run2-noit ./sync/mutual_exclusion/sync_pq/tq_multi_thread_pass.cpp : sync_tq_multi_thread_p ]
793    ;
794
795    test-suite ts_scheduler
796    :
797          [ thread-run2-noit ./test_scheduled_tp.cpp : test_scheduled_tp_p ]
798          [ thread-run2-noit ./test_scheduling_adaptor.cpp : test_scheduling_adaptor_p ]
799          [ thread-run2-noit ./test_scheduler.cpp : test_scheduler_p ]
800    ;
801
802    test-suite ts_queue_views
803    :
804          [ thread-run2-noit ./sync/mutual_exclusion/queue_views/single_thread_pass.cpp : queue_views__single_thread_p ]
805          #[ thread-run2-noit ./sync/mutual_exclusion/queue_views/multi_thread_pass.cpp : queue_views__multi_thread_p ]
806    ;
807
808    test-suite ts_deque_views
809    :
810          [ thread-run2-noit ./sync/mutual_exclusion/deque_views/single_thread_pass.cpp : deque_views__single_thread_p ]
811          #[ thread-run2-noit ./sync/mutual_exclusion/deque_views/multi_thread_pass.cpp : deque_views__multi_thread_p ]
812    ;
813
814    #explicit ts_this_thread ;
815    test-suite ts_this_thread
816    :
817          [ thread-run2-noit ./threads/this_thread/get_id/get_id_pass.cpp : this_thread__get_id_p ]
818          [ thread-run2-noit ./threads/this_thread/sleep_for/sleep_for_pass.cpp : this_thread__sleep_for_p ]
819          [ thread-run2-noit ./threads/this_thread/sleep_until/sleep_until_pass.cpp : this_thread__sleep_until_p ]
820    ;
821
822    #explicit ts_thread ;
823    test-suite ts_thread
824    :
825          [ thread-compile-fail ./threads/thread/assign/copy_fail.cpp : : thread__assign__copy_f ]
826          [ thread-run2-noit ./threads/thread/assign/move_pass.cpp : thread__assign__move_p ]
827          [ thread-compile-fail ./threads/thread/constr/copy_fail.cpp : : thread__constr__copy_f ]
828          [ thread-run2-noit ./threads/thread/constr/default_pass.cpp : thread__constr__default_p ]
829          [ thread-run-lib2 ./threads/thread/constr/lambda_pass.cpp : thread__constr__lambda_p ]
830          [ thread-run-lib2 ./threads/thread/constr/F_pass.cpp : thread__constr__F_p ]
831          [ thread-run-lib2 ./threads/thread/constr/FArgs_pass.cpp : thread__constr__FArgs_p ]
832          [ thread-run2-noit ./threads/thread/constr/Frvalue_pass.cpp : thread__constr__Frvalue_p ]
833          [ thread-run2-noit ./threads/thread/constr/FrvalueArgs_pass.cpp : thread__constr__FrvalueArgs_p ]
834          [ thread-run2-noit ./threads/thread/constr/move_pass.cpp : thread__constr__move_p ]
835          [ thread-run2-noit ./threads/thread/destr/dtor_pass.cpp : thread__destr__dtor_p ]
836          [ thread-run2-noit ./threads/thread/id/hash_pass.cpp : thread__id__hash_p ]
837          [ thread-run2-noit ./threads/thread/members/detach_pass.cpp : thread__detach_p ]
838          [ thread-run2-noit ./threads/thread/members/get_id_pass.cpp : thread__get_id_p ]
839          [ thread-run2-noit ./threads/thread/members/join_pass.cpp : thread__join_p ]
840          [ thread-run2-noit ./threads/thread/members/try_join_until_pass.cpp : thread__join_until_p ]
841          [ thread-run2-noit ./threads/thread/members/try_join_for_pass.cpp : thread__join_for_p ]
842          [ thread-run2-noit ./threads/thread/members/joinable_pass.cpp : thread__joinable_p ]
843          [ thread-run2-noit ./threads/thread/members/native_handle_pass.cpp : thread__native_handle_p ]
844          [ thread-run2-noit ./threads/thread/members/swap_pass.cpp : thread__swap_p ]
845          [ thread-run2-noit ./threads/thread/non_members/swap_pass.cpp : swap_threads_p ]
846          [ thread-run2-noit ./threads/thread/static/hardware_concurrency_pass.cpp : thread__hardware_concurrency_p ]
847    ;
848
849    #explicit ts_container ;
850    test-suite ts_container
851    :
852          [ thread-run2-noit ./threads/container/thread_vector_pass.cpp : container__thread_vector_p ]
853          [ thread-run2-noit ./threads/container/thread_ptr_list_pass.cpp : container__thread_ptr_list_p ]
854    ;
855
856    explicit ts_examples_too_long ;
857    test-suite ts_examples_too_long
858    :
859          [ thread-run2 ../example/shared_mutex.cpp : ex_shared_mutex ]
860    ;
861
862    #explicit ts_examples ;
863    test-suite ts_examples
864    :
865          [ thread-run2-noit ../example/monitor.cpp : ex_monitor ]
866          [ thread-compile ../example/starvephil.cpp : : ex_starvephil ]
867          [ thread-run2 ../example/tennis.cpp : ex_tennis ]
868          [ thread-compile ../example/condition.cpp : : ex_condition ]
869          [ thread-run2-noit ../example/mutex.cpp : ex_mutex ]
870          [ thread-run2-noit ../example/once.cpp : ex_once ]
871          [ thread-run2-noit ../example/recursive_mutex.cpp : ex_recursive_mutex ]
872          [ thread-run2-noit ../example/thread.cpp : ex_thread ]
873          [ thread-run2-noit ../example/thread_group.cpp : ex_thread_group ]
874          [ thread-run2-noit ../example/tss.cpp : ex_tss ]
875          [ thread-run2 ../example/xtime.cpp : ex_xtime ]
876          [ thread-run2 ../example/shared_monitor.cpp : ex_shared_monitor ]
877          #[ thread-run ../example/vhh_shared_monitor.cpp ]
878          #[ thread-run ../example/vhh_shared_mutex.cpp ]
879          [ thread-run2 ../example/make_future.cpp : ex_make_future ]
880          [ thread-run2 ../example/future_then.cpp : ex_future_then ]
881          [ thread-run2 ../example/future_fallback_to.cpp : ex_future_fallback_to ]
882          [ thread-run2 ../example/future_unwrap.cpp : ex_future_unwrap ]
883          [ thread-run2-noit ../example/synchronized_value.cpp : ex_synchronized_value ]
884          [ thread-run2-noit ../example/synchronized_person.cpp : ex_synchronized_person ]
885          [ thread-run2-noit ../example/thread_guard.cpp : ex_thread_guard ]
886          [ thread-run2-noit ../example/std_thread_guard.cpp : ex_std_thread_guard : <toolset>gcc-4.8:<build>no ]
887          [ thread-run2-noit ../example/scoped_thread.cpp : ex_scoped_thread ]
888          [ thread-run2-noit ../example/std_scoped_thread.cpp : ex_std_scoped_thread : <toolset>gcc-4.8:<build>no ]
889          [ thread-run2-noit ../example/strict_lock.cpp : ex_strict_lock ]
890          [ thread-run2-noit ../example/ba_externallly_locked.cpp : ex_ba_externallly_locked ]
891          [ thread-run2 ../example/producer_consumer_bounded.cpp : ex_producer_consumer_bounded ]
892          [ thread-run2 ../example/producer_consumer.cpp : ex_producer_consumer ]
893          [ thread-run2 ../example/producer_consumer2.cpp : ex_producer_consumer2 ]
894          [ thread-run2 ../example/not_interleaved.cpp : ex_not_interleaved ]
895          [ thread-run2 ../example/lambda_future.cpp : ex_lambda_future ]
896          [ thread-run2 ../example/not_interleaved2.cpp : ex_not_interleaved2 ]
897          [ thread-run2 ../example/thread_pool.cpp : ex_thread_pool ]
898          [ thread-run2 ../example/user_scheduler.cpp : ex_user_scheduler ]
899          [ thread-run2 ../example/executor.cpp : ex_executor ]
900          [ thread-run2 ../example/generic_executor_ref.cpp : ex_generic_executor_ref ]
901          [ thread-run2 ../example/serial_executor.cpp : ex_serial_executor ]
902          #[ thread-run2 ../example/serial_executor_cont.cpp : ex_serial_executor_cont ]
903          [ thread-run2 ../example/future_when_all.cpp : ex_future_when_all ]
904          [ thread-run2 ../example/parallel_accumulate.cpp : ex_parallel_accumulate ]
905          [ thread-run2 ../example/parallel_quick_sort.cpp : ex_parallel_quick_sort ]
906          [ thread-run2 ../example/with_lock_guard.cpp : ex_with_lock_guard ]
907          [ thread-run2 ../example/fib_task_region.cpp : ex_fib_task_region ]
908    ;
909
910    #explicit ts_shared_upwards ;
911    test-suite ts_shared_upwards
912    :
913          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_try_pass.cpp : uq_lock_cons_mv_ctor_sh_lock_try_p ]
914          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_for_pass.cpp : uq_lock_cons_mv_ctor_sh_lock_for_p ]
915          [ thread-run2-noit ./sync/mutual_exclusion/locks/unique_lock/cons/move_ctor_shared_lock_until_pass.cpp : uq_lock_cons_mv_ctor_sh_lock_until_p ]
916
917          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_try_pass.cpp : upg_lock_cons_move_ctor_sh_lock_try_p ]
918          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_for_pass.cpp : upg_lock_cons_move_ctor_sh_lock_for_p ]
919          [ thread-run2-noit ./sync/mutual_exclusion/locks/upgrade_lock/cons/move_ctor_shared_lock_until_pass.cpp : upg_lock_cons_move_ctor_sh_lock_untl_p ]
920    ;
921
922
923    #explicit ts_shared_lock_guard ;
924    test-suite ts_shared_lock_guard
925    :
926          [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock_guard/copy_assign_fail.cpp : : shared_lock_guard__cons__copy_assign_f ]
927          [ thread-compile-fail ./sync/mutual_exclusion/locks/shared_lock_guard/copy_ctor_fail.cpp : : shared_lock_guard__cons__copy_ctor_f ]
928          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock_guard/adopt_lock_pass.cpp : shared_lock_guard__cons__adopt_lock_p ]
929          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock_guard/default_pass.cpp : shared_lock_guard__cons__default_p ]
930          [ thread-run2-noit ./sync/mutual_exclusion/locks/shared_lock_guard/types_pass.cpp : shared_lock_guard__types_p ]
931    ;
932
933    #explicit ts_reverse_lock ;
934    test-suite ts_reverse_lock
935    :
936          [ thread-compile-fail ./sync/mutual_exclusion/locks/reverse_lock/copy_assign_fail.cpp : : reverse_lock__copy_assign_f ]
937          [ thread-compile-fail ./sync/mutual_exclusion/locks/reverse_lock/copy_ctor_fail.cpp : : reverse_lock__copy_ctor_f ]
938          [ thread-run2-noit ./sync/mutual_exclusion/locks/reverse_lock/unique_lock_ctor_pass.cpp : reverse_lock__unique_lock_ctor_p ]
939          [ thread-run2-noit ./sync/mutual_exclusion/locks/reverse_lock/types_pass.cpp : reverse_lock__types_p ]
940    ;
941
942
943    #explicit ts_synchronized_value ;
944    test-suite ts_synchronized_value
945    :
946          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/copy_assign_pass.cpp : synchronized_value__copy_assign_p ]
947          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/copy_ctor_pass.cpp : synchronized_value__copy_ctor_p ]
948          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/copy_T_assign_pass.cpp : synchronized_value__copy_T_assign_p ]
949          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/copy_T_ctor_pass.cpp : synchronized_value__copy_T_ctor_p ]
950          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/default_ctor_pass.cpp : synchronized_value__default_ctor_p ]
951          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/indirect_pass.cpp : synchronized_value__indirect_p ]
952          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/move_assign_pass.cpp : synchronized_value__move_assign_p ]
953          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/move_ctor_pass.cpp : synchronized_value__move_ctor_p ]
954          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/move_T_assign_pass.cpp : synchronized_value__move_T_assign_p ]
955          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/move_T_ctor_pass.cpp : synchronized_value__move_T_ctor_p ]
956          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/swap_pass.cpp : synchronized_value__swap_p ]
957          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/swap_T_pass.cpp : synchronized_value__swap_T_p ]
958          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/synchronize_pass.cpp : synchronized_value__synchronize_p ]
959          [ thread-run2-noit ./sync/mutual_exclusion/synchronized_value/call_pass.cpp : synchronized_value__call_p ]
960
961    ;
962
963
964    test-suite ts_with_lock_guard
965    :
966          [ thread-run2-noit ./sync/mutual_exclusion/with_lock_guard/with_lock_guard_simple.cpp : with_lock_guard_simple_p ]
967          [ thread-run2-noit ./sync/mutual_exclusion/with_lock_guard/with_lock_guard_bind.cpp : with_lock_guard_bind_p ]
968          [ thread-run2-noit ./sync/mutual_exclusion/with_lock_guard/with_lock_guard_move.cpp : with_lock_guard_move_p ]
969          [ thread-run2-noit ./sync/mutual_exclusion/with_lock_guard/with_lock_guard_lambda.cpp : with_lock_guard_lambda_p ]
970    ;
971
972    explicit ts_invoke ;
973    test-suite ts_invoke
974    :
975          [ thread-run2-noit ./functional/invoke/invoke_int_0_pass.cpp : invoke_int_0_p ]
976          [ thread-run2-noit ./functional/invoke/invoke_lvalue_pass.cpp : invoke_lvalue_p ]
977          [ thread-run2-noit ./functional/invoke/invoke_rvalue_pass.cpp : invoke_rvalue_p ]
978    ;
979
980    explicit ts_invoker ;
981    test-suite ts_invoker
982    :
983          [ thread-run2-noit ./functional/invoker/invoker_int_0_pass.cpp : invoker_int_0_p ]
984          [ thread-run2-noit ./functional/invoker/invoker_lvalue_pass.cpp : invoker_lvalue_p ]
985          [ thread-run2-noit ./functional/invoker/invoker_rvalue_pass.cpp : invoker_rvalue_p ]
986    ;
987
988
989
990    explicit ts_more ;
991    test-suite ts_more
992    :
993          [ thread-run test_7666.cpp ]
994          [ thread-run test_7720.cpp ]
995          [ thread-run test_7755.cpp ]
996          [ thread-run test_8455.cpp ]
997          [ thread-run test_8508.cpp ]
998          #[ thread-run test_8557.cpp ]
999          [ thread-run test_8586.cpp ]
1000          [ thread-run test_8943.cpp ]
1001          [ thread-run test_8960.cpp ]
1002          [ thread-run test_9079_a.cpp ]
1003          [ thread-run test_9079_b.cpp ]
1004          [ thread-run test_9192.cpp ]
1005          #[ thread-run test_9303.cpp ]
1006          #[ thread-run test_9720.cpp ]
1007          #[ thread-run test_10125.cpp ]
1008          #[ thread-run test_10128.cpp ]
1009          #[ thread-run test_10340.cpp ]
1010    ;
1011
1012    explicit ts_more_cpp11 ;
1013    test-suite ts_more_cpp11
1014    :
1015          [ thread-run test_8596.cpp ]
1016          [ thread-run test_8600.cpp ]
1017    ;
1018
1019    explicit perf ;
1020    test-suite perf
1021    :
1022          #[ thread-run ../example/perf_condition_variable.cpp ]
1023          #[ thread-run ../example/perf_shared_mutex.cpp ]
1024    ;
1025
1026
1027    #explicit ts_exception_list ;
1028    test-suite ts_exception_list
1029    :
1030          [ thread-run2-noit ./experimental/parallel/v1/exception_list_pass.cpp : exception_list_p ]
1031    ;
1032
1033    #explicit ts_task_region ;
1034    test-suite ts_task_region
1035    :
1036          [ thread-run2-noit ./experimental/parallel/v2/task_region_pass.cpp : task_region_p ]
1037    ;
1038
1039    explicit ts_other ;
1040    test-suite ts_other
1041    :
1042          [ thread-run2 ../example/this_executor.cpp : ex_this_executor ]
1043          [ thread-run2 ../example/default_executor.cpp : ex_default_executor ]
1044    ;
1045
1046    explicit ts_ ;
1047    test-suite ts_
1048    :
1049          #[ thread-run test_11256.cpp ]
1050          #[ thread-run test_11256.cpp ]
1051          #[ thread-run test_11499.cpp ]
1052          #[ thread-run test_11611.cpp ]
1053          #[ thread-run test_11818.cpp ]
1054          #[ thread-run test_11796.cpp ]
1055          #[ thread-run test_12293.cpp ]
1056          #[ thread-run test_12949.cpp ]
1057          #[ thread-run test_13480b.cpp ]
1058          [ thread-run test_13561.cpp ]
1059
1060    ;
1061
1062    explicit test_time_jumps_1_obj ;
1063    obj test_time_jumps_1_obj : test_time_jumps.cpp :
1064        # BOOST_THREAD_USES_MOVE is required to prevent ambiguity between the two definitions
1065        # of boost::move when using sync_priority_queue/sync_timed_queue with POD data types.
1066        <define>BOOST_THREAD_USES_MOVE
1067        <define>BOOST_THREAD_PROVIDES_FUTURE
1068    ;
1069
1070    explicit test_time_jumps_2_obj ;
1071    obj test_time_jumps_2_obj : test_time_jumps.cpp :
1072        # BOOST_THREAD_USES_MOVE is required to prevent ambiguity between the two definitions
1073        # of boost::move when using sync_priority_queue/sync_timed_queue with POD data types.
1074        <define>BOOST_THREAD_USES_MOVE
1075        <define>BOOST_THREAD_PROVIDES_FUTURE
1076        <define>BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
1077    ;
1078
1079    explicit test_time_jumps_3_obj ;
1080    obj test_time_jumps_3_obj : test_time_jumps.cpp :
1081        # BOOST_THREAD_USES_MOVE is required to prevent ambiguity between the two definitions
1082        # of boost::move when using sync_priority_queue/sync_timed_queue with POD data types.
1083        <define>BOOST_THREAD_USES_MOVE
1084        <define>BOOST_THREAD_PROVIDES_FUTURE
1085        <define>BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
1086        <define>BOOST_THREAD_V2_SHARED_MUTEX
1087    ;
1088
1089    explicit test_time_jumps ;
1090    test-suite test_time_jumps
1091    :
1092          [ exe test_time_jumps_1 : test_time_jumps_1_obj ../build//boost_thread ]
1093          [ exe test_time_jumps_2 : test_time_jumps_2_obj ../build//boost_thread ]
1094          [ exe test_time_jumps_3 : test_time_jumps_3_obj ../build//boost_thread ]
1095    ;
1096
1097    test-suite test_self_contained_headers : [ generate_self_contained_header_tests ] ;
1098}
1099