1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // UNSUPPORTED: libcpp-has-no-threads
12 // This test hangs forever when built against libstdc++. In order to allow
13 // validation of the test suite against other STLs we have to mark it
15 // UNSUPPORTED: libstdc++
19 // template <class L1, class L2, class... L3>
20 // void lock(L1&, L2&, L3&...);
25 #include "test_macros.h"
32 L0() : locked_(false) {}
45 void unlock() {locked_ = false;}
47 bool locked() const {return locked_;}
55 L1() : locked_(false) {}
68 void unlock() {locked_ = false;}
70 bool locked() const {return locked_;}
78 L2() : locked_(false) {}
91 void unlock() {locked_ = false;}
93 bool locked() const {return locked_;}
119 #ifndef TEST_HAS_NO_EXCEPTIONS
130 assert(!l0.locked());
131 assert(!l1.locked());
144 assert(!l0.locked());
145 assert(!l1.locked());
158 assert(!l0.locked());
159 assert(!l1.locked());
172 assert(!l0.locked());
173 assert(!l1.locked());
186 assert(!l0.locked());
187 assert(!l1.locked());
191 #ifndef _LIBCPP_HAS_NO_VARIADICS
196 std::lock(l0, l1, l2);
201 #ifndef TEST_HAS_NO_EXCEPTIONS
208 std::lock(l0, l1, l2);
213 assert(!l0.locked());
214 assert(!l1.locked());
215 assert(!l2.locked());
223 std::lock(l0, l1, l2);
232 std::lock(l0, l1, l2);
241 std::lock(l0, l1, l2);
246 #ifndef TEST_HAS_NO_EXCEPTIONS
253 std::lock(l0, l1, l2);
258 assert(!l0.locked());
259 assert(!l1.locked());
260 assert(!l2.locked());
269 std::lock(l0, l1, l2);
274 assert(!l0.locked());
275 assert(!l1.locked());
276 assert(!l2.locked());
285 std::lock(l0, l1, l2);
290 assert(!l0.locked());
291 assert(!l1.locked());
292 assert(!l2.locked());
301 std::lock(l0, l1, l2);
306 assert(!l0.locked());
307 assert(!l1.locked());
308 assert(!l2.locked());
317 std::lock(l0, l1, l2);
322 assert(!l0.locked());
323 assert(!l1.locked());
324 assert(!l2.locked());
333 std::lock(l0, l1, l2);
338 assert(!l0.locked());
339 assert(!l1.locked());
340 assert(!l2.locked());
349 std::lock(l0, l1, l2);
354 assert(!l0.locked());
355 assert(!l1.locked());
356 assert(!l2.locked());
365 std::lock(l0, l1, l2);
370 assert(!l0.locked());
371 assert(!l1.locked());
372 assert(!l2.locked());
381 std::lock(l0, l1, l2);
386 assert(!l0.locked());
387 assert(!l1.locked());
388 assert(!l2.locked());
391 #endif // TEST_HAS_NO_EXCEPTIONS
397 std::lock(l0, l1, l2, l3);
408 std::lock(l0, l1, l2, l3);
419 std::lock(l0, l1, l2, l3);
430 std::lock(l0, l1, l2, l3);
441 std::lock(l0, l1, l2, l3);
447 #ifndef TEST_HAS_NO_EXCEPTIONS
455 std::lock(l0, l1, l2, l3);
460 assert(!l0.locked());
461 assert(!l1.locked());
462 assert(!l2.locked());
463 assert(!l3.locked());
473 std::lock(l0, l1, l2, l3);
478 assert(!l0.locked());
479 assert(!l1.locked());
480 assert(!l2.locked());
481 assert(!l3.locked());
491 std::lock(l0, l1, l2, l3);
496 assert(!l0.locked());
497 assert(!l1.locked());
498 assert(!l2.locked());
499 assert(!l3.locked());
509 std::lock(l0, l1, l2, l3);
514 assert(!l0.locked());
515 assert(!l1.locked());
516 assert(!l2.locked());
517 assert(!l3.locked());
520 #endif // TEST_HAS_NO_EXCEPTIONS
521 #endif // _LIBCPP_HAS_NO_VARIADICS