brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 2e8b2aa 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// template <class Allocator>17//   promise(allocator_arg_t, const Allocator& a);18 19#include <future>20#include <cassert>21 22#include "test_macros.h"23#include "test_allocator.h"24#include "min_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> p(std::allocator_arg, test_allocator<int>(42, &alloc_stats));32        assert(alloc_stats.alloc_count == 1);33        std::future<int> f = p.get_future();34        assert(alloc_stats.alloc_count == 1);35        assert(f.valid());36    }37    assert(alloc_stats.alloc_count == 0);38    {39        std::promise<int&> p(std::allocator_arg, test_allocator<int>(42, &alloc_stats));40        assert(alloc_stats.alloc_count == 1);41        std::future<int&> f = p.get_future();42        assert(alloc_stats.alloc_count == 1);43        assert(f.valid());44    }45    assert(alloc_stats.alloc_count == 0);46    {47        std::promise<void> p(std::allocator_arg, test_allocator<void>(42, &alloc_stats));48        assert(alloc_stats.alloc_count == 1);49        std::future<void> f = p.get_future();50        assert(alloc_stats.alloc_count == 1);51        assert(f.valid());52    }53    assert(alloc_stats.alloc_count == 0);54    // Test with a minimal allocator55    {56        std::promise<int> p(std::allocator_arg, bare_allocator<void>());57        std::future<int> f = p.get_future();58        assert(f.valid());59    }60    {61        std::promise<int&> p(std::allocator_arg, bare_allocator<void>());62        std::future<int&> f = p.get_future();63        assert(f.valid());64    }65    {66        std::promise<void> p(std::allocator_arg, bare_allocator<void>());67        std::future<void> f = p.get_future();68        assert(f.valid());69    }70    // Test with a minimal allocator that returns class-type pointers71    {72        std::promise<int> p(std::allocator_arg, min_allocator<void>());73        std::future<int> f = p.get_future();74        assert(f.valid());75    }76    {77        std::promise<int&> p(std::allocator_arg, min_allocator<void>());78        std::future<int&> f = p.get_future();79        assert(f.valid());80    }81    {82        std::promise<void> p(std::allocator_arg, min_allocator<void>());83        std::future<void> f = p.get_future();84        assert(f.valid());85    }86 87  return 0;88}89