blob: 5e292b0689e07789c10810ed350e2fdb1ef42a08 [file] [log] [blame]
Howard Hinnant8759d9d2010-08-28 21:01:06 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnant412dbeb2010-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 Hinnant8759d9d2010-08-28 21:01:06 +00007//
8//===----------------------------------------------------------------------===//
9
10// <future>
11
12// class promise<R>
13
14// void swap(promise& other);
15
16// template <class R> void swap(promise<R>& x, promise<R>& y);
17
18#include <future>
19#include <cassert>
20
21#include "../test_allocator.h"
22
23int main()
24{
25 assert(test_alloc_base::count == 0);
26 {
27 std::promise<int> p0(std::allocator_arg, test_allocator<int>());
28 std::promise<int> p(std::allocator_arg, test_allocator<int>());
29 assert(test_alloc_base::count == 2);
30 p.swap(p0);
31 assert(test_alloc_base::count == 2);
32 std::future<int> f = p.get_future();
33 assert(test_alloc_base::count == 2);
34 assert(f.valid());
35 f = p0.get_future();
36 assert(f.valid());
37 assert(test_alloc_base::count == 2);
38 }
39 assert(test_alloc_base::count == 0);
40 {
41 std::promise<int> p0(std::allocator_arg, test_allocator<int>());
42 std::promise<int> p(std::allocator_arg, test_allocator<int>());
43 assert(test_alloc_base::count == 2);
44 swap(p, p0);
45 assert(test_alloc_base::count == 2);
46 std::future<int> f = p.get_future();
47 assert(test_alloc_base::count == 2);
48 assert(f.valid());
49 f = p0.get_future();
50 assert(f.valid());
51 assert(test_alloc_base::count == 2);
52 }
53 assert(test_alloc_base::count == 0);
54 {
55 std::promise<int> p0(std::allocator_arg, test_allocator<int>());
56 std::promise<int> p;
57 assert(test_alloc_base::count == 1);
58 p.swap(p0);
59 assert(test_alloc_base::count == 1);
60 std::future<int> f = p.get_future();
61 assert(test_alloc_base::count == 1);
62 assert(f.valid());
63 f = p0.get_future();
64 assert(f.valid());
65 assert(test_alloc_base::count == 1);
66 }
67 assert(test_alloc_base::count == 0);
68 {
69 std::promise<int> p0(std::allocator_arg, test_allocator<int>());
70 std::promise<int> p;
71 assert(test_alloc_base::count == 1);
72 swap(p, p0);
73 assert(test_alloc_base::count == 1);
74 std::future<int> f = p.get_future();
75 assert(test_alloc_base::count == 1);
76 assert(f.valid());
77 f = p0.get_future();
78 assert(f.valid());
79 assert(test_alloc_base::count == 1);
80 }
81 assert(test_alloc_base::count == 0);
82}