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 // UNSUPPORTED: libcpp-has-no-threads 11 12 // <future> 13 14 // class promise<R> 15 16 // void swap(promise& other); 17 18 // template <class R> void swap(promise<R>& x, promise<R>& y); 19 20 #include <future> 21 #include <cassert> 22 23 #include "../test_allocator.h" 24 main()25int main() 26 { 27 assert(test_alloc_base::count == 0); 28 { 29 std::promise<int> p0(std::allocator_arg, test_allocator<int>()); 30 std::promise<int> p(std::allocator_arg, test_allocator<int>()); 31 assert(test_alloc_base::count == 2); 32 p.swap(p0); 33 assert(test_alloc_base::count == 2); 34 std::future<int> f = p.get_future(); 35 assert(test_alloc_base::count == 2); 36 assert(f.valid()); 37 f = p0.get_future(); 38 assert(f.valid()); 39 assert(test_alloc_base::count == 2); 40 } 41 assert(test_alloc_base::count == 0); 42 { 43 std::promise<int> p0(std::allocator_arg, test_allocator<int>()); 44 std::promise<int> p(std::allocator_arg, test_allocator<int>()); 45 assert(test_alloc_base::count == 2); 46 swap(p, p0); 47 assert(test_alloc_base::count == 2); 48 std::future<int> f = p.get_future(); 49 assert(test_alloc_base::count == 2); 50 assert(f.valid()); 51 f = p0.get_future(); 52 assert(f.valid()); 53 assert(test_alloc_base::count == 2); 54 } 55 assert(test_alloc_base::count == 0); 56 { 57 std::promise<int> p0(std::allocator_arg, test_allocator<int>()); 58 std::promise<int> p; 59 assert(test_alloc_base::count == 1); 60 p.swap(p0); 61 assert(test_alloc_base::count == 1); 62 std::future<int> f = p.get_future(); 63 assert(test_alloc_base::count == 1); 64 assert(f.valid()); 65 f = p0.get_future(); 66 assert(f.valid()); 67 assert(test_alloc_base::count == 1); 68 } 69 assert(test_alloc_base::count == 0); 70 { 71 std::promise<int> p0(std::allocator_arg, test_allocator<int>()); 72 std::promise<int> p; 73 assert(test_alloc_base::count == 1); 74 swap(p, p0); 75 assert(test_alloc_base::count == 1); 76 std::future<int> f = p.get_future(); 77 assert(test_alloc_base::count == 1); 78 assert(f.valid()); 79 f = p0.get_future(); 80 assert(f.valid()); 81 assert(test_alloc_base::count == 1); 82 } 83 assert(test_alloc_base::count == 0); 84 } 85