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