summaryrefslogtreecommitdiffstats
path: root/libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
diff options
context:
space:
mode:
authorHoward Hinnant <hhinnant@apple.com>2010-05-11 19:42:16 +0000
committerHoward Hinnant <hhinnant@apple.com>2010-05-11 19:42:16 +0000
commit3e519524c118651123eecf60c2bbc5d65ad9bac3 (patch)
treeb2dd4168cfe448920a602cd7d2e40f95da187153 /libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
parent9132c59d43b6c590c9bb33496eebf9f192d6857a (diff)
downloadbcm5719-llvm-3e519524c118651123eecf60c2bbc5d65ad9bac3.tar.gz
bcm5719-llvm-3e519524c118651123eecf60c2bbc5d65ad9bac3.zip
libcxx initial import
llvm-svn: 103490
Diffstat (limited to 'libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp')
-rw-r--r--libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp b/libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
new file mode 100644
index 00000000000..d7f5ad35ef9
--- /dev/null
+++ b/libcxx/test/thread/thread.threads/thread.thread.class/thread.thread.assign/move.pass.cpp
@@ -0,0 +1,82 @@
+//===----------------------------------------------------------------------===//
+//
+// ΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚΚThe LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <thread>
+
+// class thread
+
+// thread& operator=(thread&& t);
+
+#include <thread>
+#include <new>
+#include <cstdlib>
+#include <cassert>
+
+class G
+{
+ int alive_;
+public:
+ static int n_alive;
+ static bool op_run;
+
+ G() : alive_(1) {++n_alive;}
+ G(const G& g) : alive_(g.alive_) {++n_alive;}
+ ~G() {alive_ = 0; --n_alive;}
+
+ void operator()()
+ {
+ assert(alive_ == 1);
+ assert(n_alive == 1);
+ op_run = true;
+ }
+
+ void operator()(int i, double j)
+ {
+ assert(alive_ == 1);
+ assert(n_alive == 1);
+ assert(i == 5);
+ assert(j == 5.5);
+ op_run = true;
+ }
+};
+
+int G::n_alive = 0;
+bool G::op_run = false;
+
+void f1()
+{
+ std::exit(0);
+}
+
+int main()
+{
+#ifdef _LIBCPP_MOVE
+ std::set_terminate(f1);
+ {
+ assert(G::n_alive == 0);
+ assert(!G::op_run);
+ std::thread t0(G(), 5, 5.5);
+ std::thread::id id = t0.get_id();
+ std::thread t1;
+ t1 = std::move(t0);
+ assert(t1.get_id() == id);
+ assert(t0.get_id() == std::thread::id());
+ t1.join();
+ assert(G::n_alive == 0);
+ assert(G::op_run);
+ }
+ {
+ std::thread t0(G(), 5, 5.5);
+ std::thread::id id = t0.get_id();
+ std::thread t1;
+ t0 = std::move(t1);
+ assert(false);
+ }
+#endif
+}
OpenPOWER on IntegriCloud