blob: e83757607a6b59cf965739d5d131018d8e35969e [file] [log] [blame]
Eric Fiselier257fd692016-05-07 01:04:55 +00001//===----------------------------------------------------------------------===//
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}