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, c++11, c++14 10 // TODO: Change to XFAIL once https://github.com/llvm/llvm-project/issues/40340 is fixed 11 // UNSUPPORTED: availability-pmr-missing 12 13 // test_memory_resource requires RTTI for dynamic_cast 14 // UNSUPPORTED: no-rtti 15 16 // <memory_resource> 17 18 // template <class T> class polymorphic_allocator; 19 20 // template <class T> 21 // bool operator!=( 22 // polymorphic_allocator<T> const & 23 // , polymorphic_allocator<T> const &) noexcept 24 25 #include <memory_resource> 26 #include <cassert> 27 #include <type_traits> 28 29 #include "test_macros.h" 30 #include "test_std_memory_resource.h" 31 main(int,char **)32int main(int, char**) { 33 typedef std::pmr::polymorphic_allocator<void> A1; 34 typedef std::pmr::polymorphic_allocator<int> A2; 35 // check return types 36 { 37 A1 const a1; 38 A2 const a2; 39 ASSERT_SAME_TYPE(decltype(a1 != a2), bool); 40 ASSERT_NOEXCEPT(a1 != a2); 41 } 42 // not equal same type (different resource) 43 { 44 TestResource d1(1); 45 TestResource d2(2); 46 A1 const a1(&d1); 47 A1 const a2(&d2); 48 49 assert(a1 != a2); 50 assert(d1.checkIsEqualCalledEq(1)); 51 assert(d2.checkIsEqualCalledEq(0)); 52 53 d1.reset(); 54 55 assert(a2 != a1); 56 assert(d1.checkIsEqualCalledEq(0)); 57 assert(d2.checkIsEqualCalledEq(1)); 58 } 59 // equal same type (same resource) 60 { 61 TestResource d1; 62 A1 const a1(&d1); 63 A1 const a2(&d1); 64 65 assert(!(a1 != a2)); 66 assert(d1.checkIsEqualCalledEq(0)); 67 68 assert(!(a2 != a1)); 69 assert(d1.checkIsEqualCalledEq(0)); 70 } 71 // equal same type 72 { 73 TestResource d1(1); 74 TestResource d2(1); 75 A1 const a1(&d1); 76 A1 const a2(&d2); 77 78 assert(!(a1 != a2)); 79 assert(d1.checkIsEqualCalledEq(1)); 80 assert(d2.checkIsEqualCalledEq(0)); 81 82 d1.reset(); 83 84 assert(!(a2 != a1)); 85 assert(d1.checkIsEqualCalledEq(0)); 86 assert(d2.checkIsEqualCalledEq(1)); 87 } 88 // not equal different types 89 { 90 TestResource d1; 91 TestResource1 d2; 92 A1 const a1(&d1); 93 A2 const a2(&d2); 94 95 assert(a1 != a2); 96 assert(d1.checkIsEqualCalledEq(1)); 97 assert(d2.checkIsEqualCalledEq(0)); 98 99 d1.reset(); 100 101 assert(a2 != a1); 102 assert(d1.checkIsEqualCalledEq(0)); 103 assert(d2.checkIsEqualCalledEq(1)); 104 } 105 106 return 0; 107 } 108