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++98, c++03 10 11 // <experimental/memory_resource> 12 13 //----------------------------------------------------------------------------- 14 // TESTING memory_resource * get_default_resource() noexcept; 15 // memory_resource * set_default_resource(memory_resource*) noexcept; 16 // 17 // Concerns: 18 // A) 'get_default_resource()' returns a non-null memory_resource pointer. 19 // B) 'get_default_resource()' returns the value set by the last call to 20 // 'set_default_resource(...)' and 'new_delete_resource()' if no call 21 // to 'set_default_resource(...)' has occurred. 22 // C) 'set_default_resource(...)' returns the previous value of the default 23 // resource. 24 // D) 'set_default_resource(T* p)' for a non-null 'p' sets the default resource 25 // to be 'p'. 26 // E) 'set_default_resource(null)' sets the default resource to 27 // 'new_delete_resource()'. 28 // F) 'get_default_resource' and 'set_default_resource' are noexcept. 29 30 31 #include <experimental/memory_resource> 32 #include <cassert> 33 34 #include "test_memory_resource.hpp" 35 36 using namespace std::experimental::pmr; 37 38 int main(int, char**) { 39 TestResource R; 40 { // Test (A) and (B) 41 memory_resource* p = get_default_resource(); 42 assert(p != nullptr); 43 assert(p == new_delete_resource()); 44 assert(p == get_default_resource()); 45 } 46 { // Test (C) and (D) 47 memory_resource *expect = &R; 48 memory_resource *old = set_default_resource(expect); 49 assert(old != nullptr); 50 assert(old == new_delete_resource()); 51 52 memory_resource *p = get_default_resource(); 53 assert(p != nullptr); 54 assert(p == expect); 55 assert(p == get_default_resource()); 56 } 57 { // Test (E) 58 memory_resource* old = set_default_resource(nullptr); 59 assert(old == &R); 60 memory_resource* p = get_default_resource(); 61 assert(p != nullptr); 62 assert(p == new_delete_resource()); 63 assert(p == get_default_resource()); 64 } 65 { // Test (F) 66 static_assert(noexcept(get_default_resource()), 67 "get_default_resource() must be noexcept"); 68 69 static_assert(noexcept(set_default_resource(nullptr)), 70 "set_default_resource() must be noexcept"); 71 } 72 73 return 0; 74 } 75