Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libcxx / test / std / experimental / memory / memory.resource.global / new_delete_resource.pass.cpp
blobf308752752cb7f90153b414f40f02f6768bbada3
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-exception
6 //
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: c++03
11 // XFAIL: availability-aligned_allocation-missing
13 // <experimental/memory_resource>
15 // memory_resource * new_delete_resource()
17 // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS
19 #include <experimental/memory_resource>
20 #include <type_traits>
21 #include <cassert>
23 #include "count_new.h"
25 #include "test_macros.h"
27 namespace ex = std::experimental::pmr;
29 struct assert_on_compare : public ex::memory_resource
31 protected:
32 void * do_allocate(std::size_t, size_t) override
33 { assert(false); return nullptr; }
35 void do_deallocate(void *, std::size_t, size_t) override
36 { assert(false); }
38 bool do_is_equal(ex::memory_resource const &) const noexcept override
39 { assert(false); return false; }
42 void test_return()
45 static_assert(std::is_same<
46 decltype(ex::new_delete_resource()), ex::memory_resource*
47 >::value, "");
49 // assert not null
51 assert(ex::new_delete_resource());
53 // assert same return value
55 assert(ex::new_delete_resource() == ex::new_delete_resource());
59 void test_equality()
61 // Same object
63 ex::memory_resource & r1 = *ex::new_delete_resource();
64 ex::memory_resource & r2 = *ex::new_delete_resource();
65 // check both calls returned the same object
66 assert(&r1 == &r2);
67 // check for proper equality semantics
68 assert(r1 == r2);
69 assert(r2 == r1);
70 assert(!(r1 != r2));
71 assert(!(r2 != r1));
73 // Different types
75 ex::memory_resource & r1 = *ex::new_delete_resource();
76 assert_on_compare c;
77 ex::memory_resource & r2 = c;
78 assert(r1 != r2);
79 assert(!(r1 == r2));
83 void test_allocate_deallocate()
85 ex::memory_resource & r1 = *ex::new_delete_resource();
87 globalMemCounter.reset();
89 void *ret = r1.allocate(50);
90 assert(ret);
91 assert(globalMemCounter.checkOutstandingNewEq(1));
92 assert(globalMemCounter.checkLastNewSizeEq(50));
94 r1.deallocate(ret, 1);
95 assert(globalMemCounter.checkOutstandingNewEq(0));
96 assert(globalMemCounter.checkDeleteCalledEq(1));
100 int main(int, char**)
102 static_assert(noexcept(ex::new_delete_resource()), "Must be noexcept");
103 test_return();
104 test_equality();
105 test_allocate_deallocate();
107 return 0;