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