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
14 // template <class L1, class L2, class... L3>
15 // int try_lock(L1&, L2&, L3&...);
20 #include "test_macros.h"
27 L0() : locked_(false) {}
35 void unlock() {locked_ = false;}
37 bool locked() const {return locked_;}
45 L1() : locked_(false) {}
53 void unlock() {locked_ = false;}
55 bool locked() const {return locked_;}
63 L2() : locked_(false) {}
71 void unlock() {locked_ = false;}
73 bool locked() const {return locked_;}
81 assert(std::try_lock(l0, l1) == -1);
88 assert(std::try_lock(l0, l1) == 1);
95 assert(std::try_lock(l0, l1) == 0);
99 #ifndef TEST_HAS_NO_EXCEPTIONS
105 std::try_lock(l0, l1);
110 assert(!l0.locked());
111 assert(!l1.locked());
119 std::try_lock(l0, l1);
124 assert(!l0.locked());
125 assert(!l1.locked());
129 #ifndef _LIBCPP_HAS_NO_VARIADICS
134 assert(std::try_lock(l0, l1, l2) == -1);
143 assert(std::try_lock(l0, l1, l2) == 0);
144 assert(!l0.locked());
145 assert(!l1.locked());
146 assert(!l2.locked());
148 #ifndef TEST_HAS_NO_EXCEPTIONS
155 std::try_lock(l0, l1, l2);
160 assert(!l0.locked());
161 assert(!l1.locked());
162 assert(!l2.locked());
169 assert(std::try_lock(l0, l1, l2) == 1);
170 assert(!l0.locked());
171 assert(!l1.locked());
172 assert(!l2.locked());
179 assert(std::try_lock(l0, l1, l2) == 2);
180 assert(!l0.locked());
181 assert(!l1.locked());
182 assert(!l2.locked());
188 assert(std::try_lock(l0, l1, l2) == 1);
189 assert(!l0.locked());
190 assert(!l1.locked());
191 assert(!l2.locked());
197 assert(std::try_lock(l0, l1, l2) == 0);
198 assert(!l0.locked());
199 assert(!l1.locked());
200 assert(!l2.locked());
202 #ifndef TEST_HAS_NO_EXCEPTIONS
209 std::try_lock(l0, l1, l2);
214 assert(!l0.locked());
215 assert(!l1.locked());
216 assert(!l2.locked());
225 std::try_lock(l0, l1, l2);
230 assert(!l0.locked());
231 assert(!l1.locked());
232 assert(!l2.locked());
241 std::try_lock(l0, l1, l2);
246 assert(!l0.locked());
247 assert(!l1.locked());
248 assert(!l2.locked());
256 assert(std::try_lock(l0, l1, l2) == 0);
257 assert(!l0.locked());
258 assert(!l1.locked());
259 assert(!l2.locked());
265 assert(std::try_lock(l0, l1, l2) == 0);
266 assert(!l0.locked());
267 assert(!l1.locked());
268 assert(!l2.locked());
274 assert(std::try_lock(l0, l1, l2) == 1);
275 assert(!l0.locked());
276 assert(!l1.locked());
277 assert(!l2.locked());
279 #ifndef TEST_HAS_NO_EXCEPTIONS
284 assert(std::try_lock(l0, l1, l2) == 0);
285 assert(!l0.locked());
286 assert(!l1.locked());
287 assert(!l2.locked());
293 assert(std::try_lock(l0, l1, l2) == 0);
294 assert(!l0.locked());
295 assert(!l1.locked());
296 assert(!l2.locked());
304 std::try_lock(l0, l1, l2);
309 assert(!l0.locked());
310 assert(!l1.locked());
311 assert(!l2.locked());
320 std::try_lock(l0, l1, l2);
325 assert(!l0.locked());
326 assert(!l1.locked());
327 assert(!l2.locked());
336 std::try_lock(l0, l1, l2);
341 assert(!l0.locked());
342 assert(!l1.locked());
343 assert(!l2.locked());
352 std::try_lock(l0, l1, l2);
357 assert(!l0.locked());
358 assert(!l1.locked());
359 assert(!l2.locked());
368 std::try_lock(l0, l1, l2);
373 assert(!l0.locked());
374 assert(!l1.locked());
375 assert(!l2.locked());
384 std::try_lock(l0, l1, l2);
389 assert(!l0.locked());
390 assert(!l1.locked());
391 assert(!l2.locked());
398 assert(std::try_lock(l0, l1, l2) == 0);
399 assert(!l0.locked());
400 assert(!l1.locked());
401 assert(!l2.locked());
409 std::try_lock(l0, l1, l2);
414 assert(!l0.locked());
415 assert(!l1.locked());
416 assert(!l2.locked());
423 assert(std::try_lock(l0, l1, l2) == 0);
424 assert(!l0.locked());
425 assert(!l1.locked());
426 assert(!l2.locked());
432 assert(std::try_lock(l0, l1, l2) == 0);
433 assert(!l0.locked());
434 assert(!l1.locked());
435 assert(!l2.locked());
443 std::try_lock(l0, l1, l2);
448 assert(!l0.locked());
449 assert(!l1.locked());
450 assert(!l2.locked());
459 std::try_lock(l0, l1, l2);
464 assert(!l0.locked());
465 assert(!l1.locked());
466 assert(!l2.locked());
469 #endif // TEST_HAS_NO_EXCEPTIONS
475 assert(std::try_lock(l0, l1, l2, l3) == -1);
486 assert(std::try_lock(l0, l1, l2, l3) == 0);
487 assert(!l0.locked());
488 assert(!l1.locked());
489 assert(!l2.locked());
490 assert(!l3.locked());
497 assert(std::try_lock(l0, l1, l2, l3) == 1);
498 assert(!l0.locked());
499 assert(!l1.locked());
500 assert(!l2.locked());
501 assert(!l3.locked());
508 assert(std::try_lock(l0, l1, l2, l3) == 2);
509 assert(!l0.locked());
510 assert(!l1.locked());
511 assert(!l2.locked());
512 assert(!l3.locked());
519 assert(std::try_lock(l0, l1, l2, l3) == 3);
520 assert(!l0.locked());
521 assert(!l1.locked());
522 assert(!l2.locked());
523 assert(!l3.locked());
525 #endif // _LIBCPP_HAS_NO_VARIADICS