blob: 2026219d86cb8a6e5c9c924ff7ae78084b05d5b5 [file] [log] [blame]
Eric Fiselier55263482016-02-20 05:28:30 +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#include <map>
11#include <set>
12#include <type_traits>
13
14#include "test_macros.h"
15#include "min_allocator.h"
16#include "test_allocator.h"
17
18
19template <class Map, class ValueTp, class PtrT, class CPtrT>
20void testMap() {
21 typedef typename Map::difference_type Diff;
22 {
23 typedef typename Map::iterator It;
24 static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
25 static_assert((std::is_same<typename It::reference, ValueTp&>::value), "");
26 static_assert((std::is_same<typename It::pointer, PtrT>::value), "");
27 static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
28 }
29 {
30 typedef typename Map::const_iterator It;
31 static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
32 static_assert((std::is_same<typename It::reference, ValueTp const&>::value), "");
33 static_assert((std::is_same<typename It::pointer, CPtrT>::value), "");
34 static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
35 }
36}
37
38
39template <class Set, class ValueTp, class CPtrT>
40void testSet() {
41 static_assert((std::is_same<typename Set::iterator,
42 typename Set::const_iterator>::value), "");
43 typedef typename Set::difference_type Diff;
44 {
45 typedef typename Set::iterator It;
46 static_assert((std::is_same<typename It::value_type, ValueTp>::value), "");
47 static_assert((std::is_same<typename It::reference, ValueTp const&>::value), "");
48 static_assert((std::is_same<typename It::pointer, CPtrT>::value), "");
49 static_assert((std::is_same<typename It::difference_type, Diff>::value), "");
50
51 }
52}
53
54int main() {
55 {
56 typedef std::map<int, int> Map;
57 typedef std::pair<const int, int> ValueTp;
58 testMap<Map, ValueTp, ValueTp*, ValueTp const*>();
59 }
60 {
61 typedef std::pair<const int, int> ValueTp;
62 typedef test_allocator<ValueTp> Alloc;
63 typedef std::map<int, int, std::less<int>, Alloc> Map;
64 testMap<Map, ValueTp, ValueTp*, ValueTp const*>();
65 }
66#if TEST_STD_VER >= 11
67 {
68 typedef std::pair<const int, int> ValueTp;
69 typedef min_allocator<ValueTp> Alloc;
70 typedef std::map<int, int, std::less<int>, Alloc> Map;
71 testMap<Map, ValueTp, min_pointer<ValueTp>, min_pointer<const ValueTp>>();
72 }
73#endif
74 {
75 typedef std::multimap<int, int> Map;
76 typedef std::pair<const int, int> ValueTp;
77 testMap<Map, ValueTp, ValueTp*, ValueTp const*>();
78 }
79 {
80 typedef std::pair<const int, int> ValueTp;
81 typedef test_allocator<ValueTp> Alloc;
82 typedef std::multimap<int, int, std::less<int>, Alloc> Map;
83 testMap<Map, ValueTp, ValueTp*, ValueTp const*>();
84 }
85#if TEST_STD_VER >= 11
86 {
87 typedef std::pair<const int, int> ValueTp;
88 typedef min_allocator<ValueTp> Alloc;
89 typedef std::multimap<int, int, std::less<int>, Alloc> Map;
90 testMap<Map, ValueTp, min_pointer<ValueTp>, min_pointer<const ValueTp>>();
91 }
92#endif
93 {
94 typedef int ValueTp;
95 typedef std::set<ValueTp> Set;
96 testSet<Set, ValueTp, ValueTp const*>();
97 }
98 {
99 typedef int ValueTp;
100 typedef test_allocator<ValueTp> Alloc;
101 typedef std::set<ValueTp, std::less<ValueTp>, Alloc> Set;
102 testSet<Set, ValueTp, ValueTp const*>();
103 }
104#if TEST_STD_VER >= 11
105 {
106 typedef int ValueTp;
107 typedef min_allocator<ValueTp> Alloc;
108 typedef std::set<ValueTp, std::less<ValueTp>, Alloc> Set;
109 testSet<Set, ValueTp, min_pointer<const ValueTp>>();
110 }
111#endif
112 {
113 typedef int ValueTp;
114 typedef std::multiset<ValueTp> Set;
115 testSet<Set, ValueTp, ValueTp const*>();
116 }
117 {
118 typedef int ValueTp;
119 typedef test_allocator<ValueTp> Alloc;
120 typedef std::multiset<ValueTp, std::less<ValueTp>, Alloc> Set;
121 testSet<Set, ValueTp, ValueTp const*>();
122 }
123#if TEST_STD_VER >= 11
124 {
125 typedef int ValueTp;
126 typedef min_allocator<ValueTp> Alloc;
127 typedef std::multiset<ValueTp, std::less<ValueTp>, Alloc> Set;
128 testSet<Set, ValueTp, min_pointer<const ValueTp>>();
129 }
130#endif
131}