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 // <map>
11
12 // class map
13
14 // mapped_type& at(const key_type& k);
15 // const mapped_type& at(const key_type& k) const;
16
17 #include <cassert>
18 #include <map>
19 #include <stdexcept>
20
21 #include "min_allocator.h"
22 #include "test_macros.h"
23
main()24 int main()
25 {
26 {
27 typedef std::pair<const int, double> V;
28 V ar[] =
29 {
30 V(1, 1.5),
31 V(2, 2.5),
32 V(3, 3.5),
33 V(4, 4.5),
34 V(5, 5.5),
35 V(7, 7.5),
36 V(8, 8.5),
37 };
38 std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
39 assert(m.size() == 7);
40 assert(m.at(1) == 1.5);
41 m.at(1) = -1.5;
42 assert(m.at(1) == -1.5);
43 assert(m.at(2) == 2.5);
44 assert(m.at(3) == 3.5);
45 assert(m.at(4) == 4.5);
46 assert(m.at(5) == 5.5);
47 #ifndef TEST_HAS_NO_EXCEPTIONS
48 try
49 {
50 TEST_IGNORE_NODISCARD m.at(6);
51 assert(false);
52 }
53 catch (std::out_of_range&)
54 {
55 }
56 #endif
57 assert(m.at(7) == 7.5);
58 assert(m.at(8) == 8.5);
59 assert(m.size() == 7);
60 }
61 {
62 typedef std::pair<const int, double> V;
63 V ar[] =
64 {
65 V(1, 1.5),
66 V(2, 2.5),
67 V(3, 3.5),
68 V(4, 4.5),
69 V(5, 5.5),
70 V(7, 7.5),
71 V(8, 8.5),
72 };
73 const std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
74 assert(m.size() == 7);
75 assert(m.at(1) == 1.5);
76 assert(m.at(2) == 2.5);
77 assert(m.at(3) == 3.5);
78 assert(m.at(4) == 4.5);
79 assert(m.at(5) == 5.5);
80 #ifndef TEST_HAS_NO_EXCEPTIONS
81 try
82 {
83 TEST_IGNORE_NODISCARD m.at(6);
84 assert(false);
85 }
86 catch (std::out_of_range&)
87 {
88 }
89 #endif
90 assert(m.at(7) == 7.5);
91 assert(m.at(8) == 8.5);
92 assert(m.size() == 7);
93 }
94 #if TEST_STD_VER >= 11
95 {
96 typedef std::pair<const int, double> V;
97 V ar[] =
98 {
99 V(1, 1.5),
100 V(2, 2.5),
101 V(3, 3.5),
102 V(4, 4.5),
103 V(5, 5.5),
104 V(7, 7.5),
105 V(8, 8.5),
106 };
107 std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
108 assert(m.size() == 7);
109 assert(m.at(1) == 1.5);
110 m.at(1) = -1.5;
111 assert(m.at(1) == -1.5);
112 assert(m.at(2) == 2.5);
113 assert(m.at(3) == 3.5);
114 assert(m.at(4) == 4.5);
115 assert(m.at(5) == 5.5);
116 #ifndef TEST_HAS_NO_EXCEPTIONS
117 try
118 {
119 TEST_IGNORE_NODISCARD m.at(6);
120 assert(false);
121 }
122 catch (std::out_of_range&)
123 {
124 }
125 #endif
126 assert(m.at(7) == 7.5);
127 assert(m.at(8) == 8.5);
128 assert(m.size() == 7);
129 }
130 {
131 typedef std::pair<const int, double> V;
132 V ar[] =
133 {
134 V(1, 1.5),
135 V(2, 2.5),
136 V(3, 3.5),
137 V(4, 4.5),
138 V(5, 5.5),
139 V(7, 7.5),
140 V(8, 8.5),
141 };
142 const std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
143 assert(m.size() == 7);
144 assert(m.at(1) == 1.5);
145 assert(m.at(2) == 2.5);
146 assert(m.at(3) == 3.5);
147 assert(m.at(4) == 4.5);
148 assert(m.at(5) == 5.5);
149 #ifndef TEST_HAS_NO_EXCEPTIONS
150 try
151 {
152 TEST_IGNORE_NODISCARD m.at(6);
153 assert(false);
154 }
155 catch (std::out_of_range&)
156 {
157 }
158 #endif
159 assert(m.at(7) == 7.5);
160 assert(m.at(8) == 8.5);
161 assert(m.size() == 7);
162 }
163 #endif
164 }
165