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