blob: bbabfc41df11ed9ca171400b66f52b46ae11006f [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs8d86b2e2014-09-05 19:45:05 +00009//
10// UNSUPPORTED: libcpp-has-no-threads
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000011
12// <mutex>
13
14// template <class Mutex> class unique_lock;
15
16// void unlock();
17
18#include <mutex>
19#include <cassert>
20
21bool unlock_called = false;
22
23struct mutex
24{
25 void lock() {}
26 void unlock() {unlock_called = true;}
27};
28
29mutex m;
30
31int main()
32{
33 std::unique_lock<mutex> lk(m);
34 lk.unlock();
35 assert(unlock_called == true);
36 assert(lk.owns_lock() == false);
37 try
38 {
39 lk.unlock();
40 assert(false);
41 }
42 catch (std::system_error& e)
43 {
44 assert(e.code().value() == EPERM);
45 }
46 lk.release();
47 try
48 {
49 lk.unlock();
50 assert(false);
51 }
52 catch (std::system_error& e)
53 {
54 assert(e.code().value() == EPERM);
55 }
56}