brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · efb32a5 Raw
89 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// UNSUPPORTED: no-threads10// UNSUPPORTED: c++0311 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_macros.h"24#include "test_allocator.h"25 26int main(int, char**)27{28    test_allocator_statistics alloc_stats;29    assert(alloc_stats.alloc_count == 0);30    {31        std::promise<int> p0(std::allocator_arg, test_allocator<int>(&alloc_stats));32        std::promise<int> p(std::allocator_arg, test_allocator<int>(&alloc_stats));33        assert(alloc_stats.alloc_count == 2);34        p.swap(p0);35        assert(alloc_stats.alloc_count == 2);36        std::future<int> f = p.get_future();37        assert(alloc_stats.alloc_count == 2);38        assert(f.valid());39        f = p0.get_future();40        assert(f.valid());41        assert(alloc_stats.alloc_count == 2);42    }43    assert(alloc_stats.alloc_count == 0);44    {45        std::promise<int> p0(std::allocator_arg, test_allocator<int>(&alloc_stats));46        std::promise<int> p(std::allocator_arg, test_allocator<int>(&alloc_stats));47        assert(alloc_stats.alloc_count == 2);48        swap(p, p0);49        assert(alloc_stats.alloc_count == 2);50        std::future<int> f = p.get_future();51        assert(alloc_stats.alloc_count == 2);52        assert(f.valid());53        f = p0.get_future();54        assert(f.valid());55        assert(alloc_stats.alloc_count == 2);56    }57    assert(alloc_stats.alloc_count == 0);58    {59        std::promise<int> p0(std::allocator_arg, test_allocator<int>(&alloc_stats));60        std::promise<int> p;61        assert(alloc_stats.alloc_count == 1);62        p.swap(p0);63        assert(alloc_stats.alloc_count == 1);64        std::future<int> f = p.get_future();65        assert(alloc_stats.alloc_count == 1);66        assert(f.valid());67        f = p0.get_future();68        assert(f.valid());69        assert(alloc_stats.alloc_count == 1);70    }71    assert(alloc_stats.alloc_count == 0);72    {73        std::promise<int> p0(std::allocator_arg, test_allocator<int>(&alloc_stats));74        std::promise<int> p;75        assert(alloc_stats.alloc_count == 1);76        swap(p, p0);77        assert(alloc_stats.alloc_count == 1);78        std::future<int> f = p.get_future();79        assert(alloc_stats.alloc_count == 1);80        assert(f.valid());81        f = p0.get_future();82        assert(f.valid());83        assert(alloc_stats.alloc_count == 1);84    }85    assert(alloc_stats.alloc_count == 0);86 87  return 0;88}89