Differential D20007 Diff 56380 test/std/experimental/memory/memory.polymorphic.allocator.class/memory.polymorphic.allocator.eq/equal.pass.cpp

# Changeset View

Changeset View

# Standalone View

Standalone View

# test/std/experimental/memory/memory.polymorphic.allocator.class/memory.polymorphic.allocator.eq/equal.pass.cpp

- This file was added.

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, class U> | ||||

17 | // bool operator==( | ||||

18 | // polymorphic_allocator<T> const & | ||||

19 | // , polymorphic_allocator<U> const &) noexcept | ||||

20 | | ||||

21 | #include <experimental/memory_resource> | ||||

22 | #include <type_traits> | ||||

23 | #include <cassert> | ||||

24 | | ||||

25 | #include "test_memory_resource.hpp" | ||||

26 | | ||||

27 | namespace ex = std::experimental::pmr; | ||||

28 | | ||||

29 | int 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 | // equal same type (different resource) | ||||

41 | { | ||||

42 | TestResource d1(1); | ||||

43 | TestResource d2(1); | ||||

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 different type (different resource) | ||||

70 | { | ||||

71 | TestResource d1(42); | ||||

72 | TestResource d2(42); | ||||

73 | A1 const a1(&d1); | ||||

74 | A2 const a2(&d2); | ||||

75 | | ||||

76 | assert(a1 == a2); | ||||

77 | assert(d1.checkIsEqualCalledEq(1)); | ||||

78 | assert(d2.checkIsEqualCalledEq(0)); | ||||

79 | | ||||

80 | assert(a2 == a1); | ||||

81 | assert(d1.checkIsEqualCalledEq(1)); | ||||

82 | assert(d2.checkIsEqualCalledEq(1)); | ||||

83 | | ||||

84 | } | ||||

85 | // equal different type (same resource) | ||||

86 | { | ||||

87 | TestResource d1(42); | ||||

88 | A1 const a1(&d1); | ||||

89 | A2 const a2(&d1); | ||||

90 | | ||||

91 | assert(a1 == a2); | ||||

92 | assert(d1.checkIsEqualCalledEq(0)); | ||||

93 | | ||||

94 | assert(a2 == a1); | ||||

95 | assert(d1.checkIsEqualCalledEq(0)); | ||||

96 | | ||||

97 | } | ||||

98 | // not equal same type | ||||

99 | { | ||||

100 | TestResource d1(1); | ||||

101 | TestResource d2(2); | ||||

102 | A1 const a1(&d1); | ||||

103 | A1 const a2(&d2); | ||||

104 | | ||||

105 | assert(!(a1 == a2)); | ||||

106 | assert(d1.checkIsEqualCalledEq(1)); | ||||

107 | assert(d2.checkIsEqualCalledEq(0)); | ||||

108 | | ||||

109 | d1.reset(); | ||||

110 | | ||||

111 | assert(!(a2 == a1)); | ||||

112 | assert(d1.checkIsEqualCalledEq(0)); | ||||

113 | assert(d2.checkIsEqualCalledEq(1)); | ||||

114 | | ||||

115 | } | ||||

116 | // not equal different types | ||||

117 | { | ||||

118 | TestResource d1; | ||||

119 | TestResource1 d2; | ||||

120 | A1 const a1(&d1); | ||||

121 | A2 const a2(&d2); | ||||

122 | | ||||

123 | assert(!(a1 == a2)); | ||||

124 | assert(d1.checkIsEqualCalledEq(1)); | ||||

125 | assert(d2.checkIsEqualCalledEq(0)); | ||||

126 | | ||||

127 | d1.reset(); | ||||

128 | | ||||

129 | assert(!(a2 == a1)); | ||||

130 | assert(d1.checkIsEqualCalledEq(0)); | ||||

131 | assert(d2.checkIsEqualCalledEq(1)); | ||||

132 | } | ||||

133 | } |