149 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <map>10 11// class map12 13// mapped_type& at(const key_type& k);14// const mapped_type& at(const key_type& k) const;15 16#include <cassert>17#include <map>18#include <stdexcept>19 20#include "min_allocator.h"21#include "test_macros.h"22 23int main(int, char**) {24 {25 typedef std::pair<const int, double> V;26 V ar[] = {27 V(1, 1.5),28 V(2, 2.5),29 V(3, 3.5),30 V(4, 4.5),31 V(5, 5.5),32 V(7, 7.5),33 V(8, 8.5),34 };35 std::map<int, double> m(ar, ar + sizeof(ar) / sizeof(ar[0]));36 assert(m.size() == 7);37 assert(m.at(1) == 1.5);38 m.at(1) = -1.5;39 assert(m.at(1) == -1.5);40 assert(m.at(2) == 2.5);41 assert(m.at(3) == 3.5);42 assert(m.at(4) == 4.5);43 assert(m.at(5) == 5.5);44#ifndef TEST_HAS_NO_EXCEPTIONS45 try {46 TEST_IGNORE_NODISCARD m.at(6);47 assert(false);48 } catch (std::out_of_range&) {49 }50#endif51 assert(m.at(7) == 7.5);52 assert(m.at(8) == 8.5);53 assert(m.size() == 7);54 }55 {56 typedef std::pair<const int, double> V;57 V ar[] = {58 V(1, 1.5),59 V(2, 2.5),60 V(3, 3.5),61 V(4, 4.5),62 V(5, 5.5),63 V(7, 7.5),64 V(8, 8.5),65 };66 const std::map<int, double> m(ar, ar + sizeof(ar) / sizeof(ar[0]));67 assert(m.size() == 7);68 assert(m.at(1) == 1.5);69 assert(m.at(2) == 2.5);70 assert(m.at(3) == 3.5);71 assert(m.at(4) == 4.5);72 assert(m.at(5) == 5.5);73#ifndef TEST_HAS_NO_EXCEPTIONS74 try {75 TEST_IGNORE_NODISCARD m.at(6);76 assert(false);77 } catch (std::out_of_range&) {78 }79#endif80 assert(m.at(7) == 7.5);81 assert(m.at(8) == 8.5);82 assert(m.size() == 7);83 }84#if TEST_STD_VER >= 1185 {86 typedef std::pair<const int, double> V;87 V ar[] = {88 V(1, 1.5),89 V(2, 2.5),90 V(3, 3.5),91 V(4, 4.5),92 V(5, 5.5),93 V(7, 7.5),94 V(8, 8.5),95 };96 std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));97 assert(m.size() == 7);98 assert(m.at(1) == 1.5);99 m.at(1) = -1.5;100 assert(m.at(1) == -1.5);101 assert(m.at(2) == 2.5);102 assert(m.at(3) == 3.5);103 assert(m.at(4) == 4.5);104 assert(m.at(5) == 5.5);105# ifndef TEST_HAS_NO_EXCEPTIONS106 try {107 TEST_IGNORE_NODISCARD m.at(6);108 assert(false);109 } catch (std::out_of_range&) {110 }111# endif112 assert(m.at(7) == 7.5);113 assert(m.at(8) == 8.5);114 assert(m.size() == 7);115 }116 {117 typedef std::pair<const int, double> V;118 V ar[] = {119 V(1, 1.5),120 V(2, 2.5),121 V(3, 3.5),122 V(4, 4.5),123 V(5, 5.5),124 V(7, 7.5),125 V(8, 8.5),126 };127 const std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));128 assert(m.size() == 7);129 assert(m.at(1) == 1.5);130 assert(m.at(2) == 2.5);131 assert(m.at(3) == 3.5);132 assert(m.at(4) == 4.5);133 assert(m.at(5) == 5.5);134# ifndef TEST_HAS_NO_EXCEPTIONS135 try {136 TEST_IGNORE_NODISCARD m.at(6);137 assert(false);138 } catch (std::out_of_range&) {139 }140# endif141 assert(m.at(7) == 7.5);142 assert(m.at(8) == 8.5);143 assert(m.size() == 7);144 }145#endif146 147 return 0;148}149