1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 98d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// 108d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// UNSUPPORTED: libcpp-has-no-threads 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <mutex> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class L1, class L2, class... L3> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// int try_lock(L1&, L2&, L3&...); 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <mutex> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2088837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#include "test_macros.h" 2188837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L0 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0() : locked_(false) {} 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = true; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L1 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1() : locked_(false) {} 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locked_ = false; 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass L2 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked_; 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2() : locked_(false) {} 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool try_lock() 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 6788837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez TEST_THROW(1); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return locked_; 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void unlock() {locked_ = false;} 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool locked() const {return locked_;} 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1) == -1); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1) == 1); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1) == 0); 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 9988837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 12888837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#endif 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _LIBCPP_HAS_NO_VARIADICS 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == -1); 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 14888837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 1); 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 17488837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#endif 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 2); 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 1); 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 20288837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 25188837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#endif 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 1); 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 27988837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#ifndef TEST_HAS_NO_EXCEPTIONS 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l2; 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l1; 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2) == 0); 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L2 l0; 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant try 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::try_lock(l0, l1, l2); 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(false); 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant catch (int) 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 46988837404569b90c0e871550086169612545f253aRoger Ferrer Ibanez#endif // TEST_HAS_NO_EXCEPTIONS 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == -1); 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l0.locked()); 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l1.locked()); 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l2.locked()); 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(l3.locked()); 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l0; 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 0); 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 493bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 494bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l1; 495bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 496bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 497bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 1); 498bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 499bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 500bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 501bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 502bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 503bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 504bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 505bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 506bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l2; 507bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l3; 508bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 2); 509bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 510bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 511bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 512bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 513bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 514bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 515bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l0; 516bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l1; 517bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L0 l2; 518bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant L1 l3; 519bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::try_lock(l0, l1, l2, l3) == 3); 520bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l0.locked()); 521bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l1.locked()); 522bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l2.locked()); 523bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(!l3.locked()); 524bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 525f11ea144609929bb96a05f583ad7c29abd142730Howard Hinnant#endif // _LIBCPP_HAS_NO_VARIADICS 526bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 527