1ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===//
2ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
3ee226c05af9e0187098f43fb71465a581487af9bDan Austin//                     The LLVM Compiler Infrastructure
4ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
5ee226c05af9e0187098f43fb71465a581487af9bDan Austin// This file is dual licensed under the MIT and the University of Illinois Open
6ee226c05af9e0187098f43fb71465a581487af9bDan Austin// Source Licenses. See LICENSE.TXT for details.
7ee226c05af9e0187098f43fb71465a581487af9bDan Austin//
8ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===//
9ee226c05af9e0187098f43fb71465a581487af9bDan Austin
10ee226c05af9e0187098f43fb71465a581487af9bDan Austin// UNSUPPORTED: c++98, c++03
11ee226c05af9e0187098f43fb71465a581487af9bDan Austin
12ee226c05af9e0187098f43fb71465a581487af9bDan Austin// <experimental/memory_resource>
13ee226c05af9e0187098f43fb71465a581487af9bDan Austin
14ee226c05af9e0187098f43fb71465a581487af9bDan Austin// template <class T> class polymorphic_allocator
15ee226c05af9e0187098f43fb71465a581487af9bDan Austin
16ee226c05af9e0187098f43fb71465a581487af9bDan Austin// T* polymorphic_allocator<T>::deallocate(T*, size_t size)
17ee226c05af9e0187098f43fb71465a581487af9bDan Austin
18ee226c05af9e0187098f43fb71465a581487af9bDan Austinint AssertCount = 0;
19ee226c05af9e0187098f43fb71465a581487af9bDan Austin
20ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : (void)::AssertCount++)
21ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define _LIBCPP_DEBUG 0
22ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <experimental/memory_resource>
23ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <type_traits>
24ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <cassert>
25ee226c05af9e0187098f43fb71465a581487af9bDan Austin
26ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_memory_resource.hpp"
27ee226c05af9e0187098f43fb71465a581487af9bDan Austin
28ee226c05af9e0187098f43fb71465a581487af9bDan Austinnamespace ex = std::experimental::pmr;
29ee226c05af9e0187098f43fb71465a581487af9bDan Austin
30ee226c05af9e0187098f43fb71465a581487af9bDan Austinint main()
31ee226c05af9e0187098f43fb71465a581487af9bDan Austin{
32ee226c05af9e0187098f43fb71465a581487af9bDan Austin    using Alloc = NullAllocator<char>;
33ee226c05af9e0187098f43fb71465a581487af9bDan Austin    using R = ex::resource_adaptor<Alloc>;
34ee226c05af9e0187098f43fb71465a581487af9bDan Austin    AllocController P;
35ee226c05af9e0187098f43fb71465a581487af9bDan Austin    ex::resource_adaptor<Alloc> r(Alloc{P});
36ee226c05af9e0187098f43fb71465a581487af9bDan Austin    ex::memory_resource & m1 = r;
37ee226c05af9e0187098f43fb71465a581487af9bDan Austin
38ee226c05af9e0187098f43fb71465a581487af9bDan Austin    std::size_t maxSize = std::numeric_limits<std::size_t>::max()
39ee226c05af9e0187098f43fb71465a581487af9bDan Austin                            - alignof(std::max_align_t);
40ee226c05af9e0187098f43fb71465a581487af9bDan Austin
41ee226c05af9e0187098f43fb71465a581487af9bDan Austin    m1.deallocate(nullptr, maxSize);
42ee226c05af9e0187098f43fb71465a581487af9bDan Austin    assert(AssertCount == 0);
43ee226c05af9e0187098f43fb71465a581487af9bDan Austin    m1.deallocate(nullptr, maxSize + 1);
44ee226c05af9e0187098f43fb71465a581487af9bDan Austin    assert(AssertCount >= 1);
45ee226c05af9e0187098f43fb71465a581487af9bDan Austin}
46