15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier 
95a83710eSEric Fiselier // <map>
105a83710eSEric Fiselier 
115a83710eSEric Fiselier // class map
125a83710eSEric Fiselier 
135a83710eSEric Fiselier //       mapped_type& at(const key_type& k);
145a83710eSEric Fiselier // const mapped_type& at(const key_type& k) const;
155a83710eSEric Fiselier 
165a83710eSEric Fiselier #include <cassert>
171fc51f29SBilly Robert O'Neal III #include <map>
181fc51f29SBilly Robert O'Neal III #include <stdexcept>
195a83710eSEric Fiselier 
205a83710eSEric Fiselier #include "min_allocator.h"
21f2e50651SRoger Ferrer Ibanez #include "test_macros.h"
225a83710eSEric Fiselier 
main(int,char **)23*2df59c50SJF Bastien int main(int, char**)
245a83710eSEric Fiselier {
255a83710eSEric Fiselier     {
265a83710eSEric Fiselier         typedef std::pair<const int, double> V;
275a83710eSEric Fiselier         V ar[] =
285a83710eSEric Fiselier         {
295a83710eSEric Fiselier             V(1, 1.5),
305a83710eSEric Fiselier             V(2, 2.5),
315a83710eSEric Fiselier             V(3, 3.5),
325a83710eSEric Fiselier             V(4, 4.5),
335a83710eSEric Fiselier             V(5, 5.5),
345a83710eSEric Fiselier             V(7, 7.5),
355a83710eSEric Fiselier             V(8, 8.5),
365a83710eSEric Fiselier         };
375a83710eSEric Fiselier         std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
385a83710eSEric Fiselier         assert(m.size() == 7);
395a83710eSEric Fiselier         assert(m.at(1) == 1.5);
405a83710eSEric Fiselier         m.at(1) = -1.5;
415a83710eSEric Fiselier         assert(m.at(1) == -1.5);
425a83710eSEric Fiselier         assert(m.at(2) == 2.5);
435a83710eSEric Fiselier         assert(m.at(3) == 3.5);
445a83710eSEric Fiselier         assert(m.at(4) == 4.5);
455a83710eSEric Fiselier         assert(m.at(5) == 5.5);
46f2e50651SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS
475a83710eSEric Fiselier         try
485a83710eSEric Fiselier         {
49ba40b056SBilly Robert O'Neal III             TEST_IGNORE_NODISCARD m.at(6);
505a83710eSEric Fiselier             assert(false);
515a83710eSEric Fiselier         }
525a83710eSEric Fiselier         catch (std::out_of_range&)
535a83710eSEric Fiselier         {
545a83710eSEric Fiselier         }
55f2e50651SRoger Ferrer Ibanez #endif
565a83710eSEric Fiselier         assert(m.at(7) == 7.5);
575a83710eSEric Fiselier         assert(m.at(8) == 8.5);
585a83710eSEric Fiselier         assert(m.size() == 7);
595a83710eSEric Fiselier     }
605a83710eSEric Fiselier     {
615a83710eSEric Fiselier         typedef std::pair<const int, double> V;
625a83710eSEric Fiselier         V ar[] =
635a83710eSEric Fiselier         {
645a83710eSEric Fiselier             V(1, 1.5),
655a83710eSEric Fiselier             V(2, 2.5),
665a83710eSEric Fiselier             V(3, 3.5),
675a83710eSEric Fiselier             V(4, 4.5),
685a83710eSEric Fiselier             V(5, 5.5),
695a83710eSEric Fiselier             V(7, 7.5),
705a83710eSEric Fiselier             V(8, 8.5),
715a83710eSEric Fiselier         };
725a83710eSEric Fiselier         const std::map<int, double> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
735a83710eSEric Fiselier         assert(m.size() == 7);
745a83710eSEric Fiselier         assert(m.at(1) == 1.5);
755a83710eSEric Fiselier         assert(m.at(2) == 2.5);
765a83710eSEric Fiselier         assert(m.at(3) == 3.5);
775a83710eSEric Fiselier         assert(m.at(4) == 4.5);
785a83710eSEric Fiselier         assert(m.at(5) == 5.5);
79f2e50651SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS
805a83710eSEric Fiselier         try
815a83710eSEric Fiselier         {
82ba40b056SBilly Robert O'Neal III             TEST_IGNORE_NODISCARD m.at(6);
835a83710eSEric Fiselier             assert(false);
845a83710eSEric Fiselier         }
855a83710eSEric Fiselier         catch (std::out_of_range&)
865a83710eSEric Fiselier         {
875a83710eSEric Fiselier         }
88f2e50651SRoger Ferrer Ibanez #endif
895a83710eSEric Fiselier         assert(m.at(7) == 7.5);
905a83710eSEric Fiselier         assert(m.at(8) == 8.5);
915a83710eSEric Fiselier         assert(m.size() == 7);
925a83710eSEric Fiselier     }
93f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
945a83710eSEric Fiselier     {
955a83710eSEric Fiselier         typedef std::pair<const int, double> V;
965a83710eSEric Fiselier         V ar[] =
975a83710eSEric Fiselier         {
985a83710eSEric Fiselier             V(1, 1.5),
995a83710eSEric Fiselier             V(2, 2.5),
1005a83710eSEric Fiselier             V(3, 3.5),
1015a83710eSEric Fiselier             V(4, 4.5),
1025a83710eSEric Fiselier             V(5, 5.5),
1035a83710eSEric Fiselier             V(7, 7.5),
1045a83710eSEric Fiselier             V(8, 8.5),
1055a83710eSEric Fiselier         };
1065a83710eSEric Fiselier         std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1075a83710eSEric Fiselier         assert(m.size() == 7);
1085a83710eSEric Fiselier         assert(m.at(1) == 1.5);
1095a83710eSEric Fiselier         m.at(1) = -1.5;
1105a83710eSEric Fiselier         assert(m.at(1) == -1.5);
1115a83710eSEric Fiselier         assert(m.at(2) == 2.5);
1125a83710eSEric Fiselier         assert(m.at(3) == 3.5);
1135a83710eSEric Fiselier         assert(m.at(4) == 4.5);
1145a83710eSEric Fiselier         assert(m.at(5) == 5.5);
115f2e50651SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS
1165a83710eSEric Fiselier         try
1175a83710eSEric Fiselier         {
118ba40b056SBilly Robert O'Neal III             TEST_IGNORE_NODISCARD m.at(6);
1195a83710eSEric Fiselier             assert(false);
1205a83710eSEric Fiselier         }
1215a83710eSEric Fiselier         catch (std::out_of_range&)
1225a83710eSEric Fiselier         {
1235a83710eSEric Fiselier         }
124f2e50651SRoger Ferrer Ibanez #endif
1255a83710eSEric Fiselier         assert(m.at(7) == 7.5);
1265a83710eSEric Fiselier         assert(m.at(8) == 8.5);
1275a83710eSEric Fiselier         assert(m.size() == 7);
1285a83710eSEric Fiselier     }
1295a83710eSEric Fiselier     {
1305a83710eSEric Fiselier         typedef std::pair<const int, double> V;
1315a83710eSEric Fiselier         V ar[] =
1325a83710eSEric Fiselier         {
1335a83710eSEric Fiselier             V(1, 1.5),
1345a83710eSEric Fiselier             V(2, 2.5),
1355a83710eSEric Fiselier             V(3, 3.5),
1365a83710eSEric Fiselier             V(4, 4.5),
1375a83710eSEric Fiselier             V(5, 5.5),
1385a83710eSEric Fiselier             V(7, 7.5),
1395a83710eSEric Fiselier             V(8, 8.5),
1405a83710eSEric Fiselier         };
1415a83710eSEric Fiselier         const std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1425a83710eSEric Fiselier         assert(m.size() == 7);
1435a83710eSEric Fiselier         assert(m.at(1) == 1.5);
1445a83710eSEric Fiselier         assert(m.at(2) == 2.5);
1455a83710eSEric Fiselier         assert(m.at(3) == 3.5);
1465a83710eSEric Fiselier         assert(m.at(4) == 4.5);
1475a83710eSEric Fiselier         assert(m.at(5) == 5.5);
148f2e50651SRoger Ferrer Ibanez #ifndef TEST_HAS_NO_EXCEPTIONS
1495a83710eSEric Fiselier         try
1505a83710eSEric Fiselier         {
151ba40b056SBilly Robert O'Neal III             TEST_IGNORE_NODISCARD m.at(6);
1525a83710eSEric Fiselier             assert(false);
1535a83710eSEric Fiselier         }
1545a83710eSEric Fiselier         catch (std::out_of_range&)
1555a83710eSEric Fiselier         {
1565a83710eSEric Fiselier         }
157f2e50651SRoger Ferrer Ibanez #endif
1585a83710eSEric Fiselier         assert(m.at(7) == 7.5);
1595a83710eSEric Fiselier         assert(m.at(8) == 8.5);
1605a83710eSEric Fiselier         assert(m.size() == 7);
1615a83710eSEric Fiselier     }
1625a83710eSEric Fiselier #endif
163*2df59c50SJF Bastien 
164*2df59c50SJF Bastien   return 0;
1655a83710eSEric Fiselier }
166