brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · cabc9f7 Raw
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