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 // REQUIRES: c++experimental 11 // UNSUPPORTED: c++98, c++03 12 13 // <experimental/memory_resource> 14 15 // template <class T> class polymorphic_allocator; 16 17 // template <class T> 18 // bool operator!=( 19 // polymorphic_allocator<T> const & 20 // , polymorphic_allocator<T> const &) noexcept 21 22 #include <experimental/memory_resource> 23 #include <type_traits> 24 #include <cassert> 25 26 #include "test_memory_resource.hpp" 27 28 namespace ex = std::experimental::pmr; 29 30 int main() 31 { 32 typedef ex::polymorphic_allocator<void> A1; 33 typedef ex::polymorphic_allocator<int> A2; 34 // check return types 35 { 36 A1 const a1; 37 A2 const a2; 38 static_assert(std::is_same<decltype(a1 != a2), bool>::value, ""); 39 static_assert(noexcept(a1 != a2), ""); 40 } 41 // not equal same type (different resource) 42 { 43 TestResource d1(1); 44 TestResource d2(2); 45 A1 const a1(&d1); 46 A1 const a2(&d2); 47 48 assert(a1 != a2); 49 assert(d1.checkIsEqualCalledEq(1)); 50 assert(d2.checkIsEqualCalledEq(0)); 51 52 d1.reset(); 53 54 assert(a2 != a1); 55 assert(d1.checkIsEqualCalledEq(0)); 56 assert(d2.checkIsEqualCalledEq(1)); 57 } 58 // equal same type (same resource) 59 { 60 TestResource d1; 61 A1 const a1(&d1); 62 A1 const a2(&d1); 63 64 assert(!(a1 != a2)); 65 assert(d1.checkIsEqualCalledEq(0)); 66 67 assert(!(a2 != a1)); 68 assert(d1.checkIsEqualCalledEq(0)); 69 } 70 // equal same type 71 { 72 TestResource d1(1); 73 TestResource d2(1); 74 A1 const a1(&d1); 75 A1 const a2(&d2); 76 77 assert(!(a1 != a2)); 78 assert(d1.checkIsEqualCalledEq(1)); 79 assert(d2.checkIsEqualCalledEq(0)); 80 81 d1.reset(); 82 83 assert(!(a2 != a1)); 84 assert(d1.checkIsEqualCalledEq(0)); 85 assert(d2.checkIsEqualCalledEq(1)); 86 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