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 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03 10 11 // test_memory_resource requires RTTI for dynamic_cast 12 // UNSUPPORTED: no-rtti 13 14 // Aligned allocation is required by std::experimental::pmr, but it was not provided 15 // before macosx10.13 and as a result we get linker errors when deploying to older than 16 // macosx10.13. 17 // XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12}} 18 19 // <experimental/memory_resource> 20 21 //----------------------------------------------------------------------------- 22 // TESTING memory_resource * get_default_resource() noexcept; 23 // memory_resource * set_default_resource(memory_resource*) noexcept; 24 // 25 // Concerns: 26 // A) 'get_default_resource()' returns a non-null memory_resource pointer. 27 // B) 'get_default_resource()' returns the value set by the last call to 28 // 'set_default_resource(...)' and 'new_delete_resource()' if no call 29 // to 'set_default_resource(...)' has occurred. 30 // C) 'set_default_resource(...)' returns the previous value of the default 31 // resource. 32 // D) 'set_default_resource(T* p)' for a non-null 'p' sets the default resource 33 // to be 'p'. 34 // E) 'set_default_resource(null)' sets the default resource to 35 // 'new_delete_resource()'. 36 // F) 'get_default_resource' and 'set_default_resource' are noexcept. 37 38 39 #include <experimental/memory_resource> 40 #include <cassert> 41 42 #include "test_memory_resource.h" 43 44 #include "test_macros.h" 45 46 using namespace std::experimental::pmr; 47 main(int,char **)48int main(int, char**) { 49 TestResource R; 50 { // Test (A) and (B) 51 memory_resource* p = get_default_resource(); 52 assert(p != nullptr); 53 assert(p == new_delete_resource()); 54 assert(p == get_default_resource()); 55 } 56 { // Test (C) and (D) 57 memory_resource *expect = &R; 58 memory_resource *old = set_default_resource(expect); 59 assert(old != nullptr); 60 assert(old == new_delete_resource()); 61 62 memory_resource *p = get_default_resource(); 63 assert(p != nullptr); 64 assert(p == expect); 65 assert(p == get_default_resource()); 66 } 67 { // Test (E) 68 memory_resource* old = set_default_resource(nullptr); 69 assert(old == &R); 70 memory_resource* p = get_default_resource(); 71 assert(p != nullptr); 72 assert(p == new_delete_resource()); 73 assert(p == get_default_resource()); 74 } 75 { // Test (F) 76 static_assert(noexcept(get_default_resource()), 77 "get_default_resource() must be noexcept"); 78 79 static_assert(noexcept(set_default_resource(nullptr)), 80 "set_default_resource() must be noexcept"); 81 } 82 83 return 0; 84 } 85