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 // <experimental/memory_resource> 15 16 //------------------------------------------------------------------------------ 17 // TESTING virtual bool is_equal(memory_resource const &) const noexcept 18 // 19 // Concerns: 20 // A) 'memory_resource' provides a function 'is_equal' with the required 21 // signature. 22 // B) 'is_equal' is noexcept. 23 // C) 'do_is_equal' is called using the same arguments passed to 'is_equal' 24 // and the resulting value is returned. 25 // D) 'do_is_equal' is called on the LHS object and not the RHS object. 26 27 #include <experimental/memory_resource> 28 #include <type_traits> 29 #include <cassert> 30 #include "test_memory_resource.h" 31 32 #include "test_macros.h" 33 34 using std::experimental::pmr::memory_resource; 35 main(int,char **)36int main(int, char**) 37 { 38 { 39 memory_resource const* r1 = nullptr; 40 memory_resource const* r2 = nullptr; 41 static_assert( 42 noexcept(r1->is_equal(*r2)) 43 , "is_equal must be noexcept" 44 ); 45 } 46 { 47 TestResource1 R1(1); 48 auto& P1 = R1.getController(); 49 memory_resource const& M1 = R1; 50 51 TestResource2 R2(1); 52 auto& P2 = R2.getController(); 53 memory_resource const& M2 = R2; 54 55 assert(M1.is_equal(M2) == false); 56 assert(P1.checkIsEqualCalledEq(1)); 57 assert(P2.checkIsEqualCalledEq(0)); 58 59 assert(M2.is_equal(M1) == false); 60 assert(P2.checkIsEqualCalledEq(1)); 61 assert(P1.checkIsEqualCalledEq(1)); 62 } 63 { 64 TestResource1 R1(1); 65 auto& P1 = R1.getController(); 66 memory_resource const& M1 = R1; 67 68 TestResource1 R2(2); 69 auto& P2 = R2.getController(); 70 memory_resource const& M2 = R2; 71 72 assert(M1.is_equal(M2) == false); 73 assert(P1.checkIsEqualCalledEq(1)); 74 assert(P2.checkIsEqualCalledEq(0)); 75 76 assert(M2.is_equal(M1) == false); 77 assert(P2.checkIsEqualCalledEq(1)); 78 assert(P1.checkIsEqualCalledEq(1)); 79 } 80 { 81 TestResource1 R1(1); 82 auto& P1 = R1.getController(); 83 memory_resource const& M1 = R1; 84 85 TestResource1 R2(1); 86 auto& P2 = R2.getController(); 87 memory_resource const& M2 = R2; 88 89 assert(M1.is_equal(M2) == true); 90 assert(P1.checkIsEqualCalledEq(1)); 91 assert(P2.checkIsEqualCalledEq(0)); 92 93 assert(M2.is_equal(M1) == true); 94 assert(P2.checkIsEqualCalledEq(1)); 95 assert(P1.checkIsEqualCalledEq(1)); 96 } 97 98 return 0; 99 } 100