1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 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} 83