brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · bbad44c Raw
162 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//       iterator begin();14// const_iterator begin() const;15//       iterator end();16// const_iterator end()   const;17//18//       reverse_iterator rbegin();19// const_reverse_iterator rbegin() const;20//       reverse_iterator rend();21// const_reverse_iterator rend()   const;22//23// const_iterator         cbegin()  const;24// const_iterator         cend()    const;25// const_reverse_iterator crbegin() const;26// const_reverse_iterator crend()   const;27 28#include <map>29#include <cassert>30#include <cstddef>31 32#include "test_macros.h"33#include "min_allocator.h"34 35int main(int, char**) {36  {37    typedef std::pair<const int, double> V;38    V ar[] = {V(1, 1),   V(1, 1.5), V(1, 2),   V(2, 1),   V(2, 1.5), V(2, 2),   V(3, 1),   V(3, 1.5),39              V(3, 2),   V(4, 1),   V(4, 1.5), V(4, 2),   V(5, 1),   V(5, 1.5), V(5, 2),   V(6, 1),40              V(6, 1.5), V(6, 2),   V(7, 1),   V(7, 1.5), V(7, 2),   V(8, 1),   V(8, 1.5), V(8, 2)};41    std::map<int, double> m(ar, ar + sizeof(ar) / sizeof(ar[0]));42    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());43    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());44    std::map<int, double>::iterator i;45    i                                       = m.begin();46    std::map<int, double>::const_iterator k = i;47    assert(i == k);48    for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) {49      assert(i->first == j);50      assert(i->second == 1);51      i->second = 2.5;52      assert(i->second == 2.5);53    }54    assert(i == m.end());55    for (int j = m.size(); j >= 1; --j) {56      --i;57      assert(i->first == j);58      assert(i->second == 2.5);59      i->second = 1;60      assert(i->second == 1);61    }62    assert(i == m.begin());63  }64  {65    typedef std::pair<const int, double> V;66    V ar[] = {V(1, 1),   V(1, 1.5), V(1, 2),   V(2, 1),   V(2, 1.5), V(2, 2),   V(3, 1),   V(3, 1.5),67              V(3, 2),   V(4, 1),   V(4, 1.5), V(4, 2),   V(5, 1),   V(5, 1.5), V(5, 2),   V(6, 1),68              V(6, 1.5), V(6, 2),   V(7, 1),   V(7, 1.5), V(7, 2),   V(8, 1),   V(8, 1.5), V(8, 2)};69    const std::map<int, double> m(ar, ar + sizeof(ar) / sizeof(ar[0]));70    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());71    assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());72    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());73    assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());74    std::map<int, double>::const_iterator i;75    i = m.begin();76    for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) {77      assert(i->first == j);78      assert(i->second == 1);79    }80    assert(i == m.end());81    for (int j = m.size(); j >= 1; --j) {82      --i;83      assert(i->first == j);84      assert(i->second == 1);85    }86    assert(i == m.begin());87  }88#if TEST_STD_VER >= 1189  {90    typedef std::pair<const int, double> V;91    V ar[] = {V(1, 1),   V(1, 1.5), V(1, 2),   V(2, 1),   V(2, 1.5), V(2, 2),   V(3, 1),   V(3, 1.5),92              V(3, 2),   V(4, 1),   V(4, 1.5), V(4, 2),   V(5, 1),   V(5, 1.5), V(5, 2),   V(6, 1),93              V(6, 1.5), V(6, 2),   V(7, 1),   V(7, 1.5), V(7, 2),   V(8, 1),   V(8, 1.5), V(8, 2)};94    std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));95    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());96    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());97    std::map<int, double, std::less<int>, min_allocator<V>>::iterator i;98    i                                                                         = m.begin();99    std::map<int, double, std::less<int>, min_allocator<V>>::const_iterator k = i;100    assert(i == k);101    for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) {102      assert(i->first == j);103      assert(i->second == 1);104      i->second = 2.5;105      assert(i->second == 2.5);106    }107    assert(i == m.end());108    for (int j = m.size(); j >= 1; --j) {109      --i;110      assert(i->first == j);111      assert(i->second == 2.5);112      i->second = 1;113      assert(i->second == 1);114    }115    assert(i == m.begin());116  }117  {118    typedef std::pair<const int, double> V;119    V ar[] = {V(1, 1),   V(1, 1.5), V(1, 2),   V(2, 1),   V(2, 1.5), V(2, 2),   V(3, 1),   V(3, 1.5),120              V(3, 2),   V(4, 1),   V(4, 1.5), V(4, 2),   V(5, 1),   V(5, 1.5), V(5, 2),   V(6, 1),121              V(6, 1.5), V(6, 2),   V(7, 1),   V(7, 1.5), V(7, 2),   V(8, 1),   V(8, 1.5), V(8, 2)};122    const std::map<int, double, std::less<int>, min_allocator<V>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));123    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());124    assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());125    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());126    assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());127    std::map<int, double, std::less<int>, min_allocator<V>>::const_iterator i;128    i = m.begin();129    for (int j = 1; static_cast<std::size_t>(j) <= m.size(); ++j, ++i) {130      assert(i->first == j);131      assert(i->second == 1);132    }133    assert(i == m.end());134    for (int j = m.size(); j >= 1; --j) {135      --i;136      assert(i->first == j);137      assert(i->second == 1);138    }139    assert(i == m.begin());140  }141#endif142#if TEST_STD_VER > 11143  { // N3644 testing144    typedef std::map<int, double> C;145    C::iterator ii1{}, ii2{};146    C::iterator ii4 = ii1;147    C::const_iterator cii{};148    assert(ii1 == ii2);149    assert(ii1 == ii4);150 151    assert(!(ii1 != ii2));152 153    assert((ii1 == cii));154    assert((cii == ii1));155    assert(!(ii1 != cii));156    assert(!(cii != ii1));157  }158#endif159 160  return 0;161}162