brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · ffdc39f Raw
170 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 multimap12 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::multimap<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::multimap<int, double>::iterator i;45    i                                            = m.begin();46    std::multimap<int, double>::const_iterator k = i;47    assert(i == k);48    for (int j = 1; j <= 8; ++j)49      for (double d = 1; d <= 2; d += .5, ++i) {50        assert(i->first == j);51        assert(i->second == d);52        i->second = 2.5;53        assert(i->second == 2.5);54      }55    assert(i == m.end());56    for (int j = 8; j >= 1; --j)57      for (double d = 1; d <= 2; d += .5) {58        --i;59        assert(i->first == j);60        assert(i->second == 2.5);61        i->second = d;62        assert(i->second == d);63      }64    assert(i == m.begin());65  }66  {67    typedef std::pair<const int, double> V;68    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),69              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),70              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)};71    const std::multimap<int, double> m(ar, ar + sizeof(ar) / sizeof(ar[0]));72    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());73    assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());74    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());75    assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());76    std::multimap<int, double>::const_iterator i;77    i = m.begin();78    for (int j = 1; j <= 8; ++j)79      for (double d = 1; d <= 2; d += .5, ++i) {80        assert(i->first == j);81        assert(i->second == d);82      }83    assert(i == m.end());84    for (int j = 8; j >= 1; --j)85      for (double d = 2; d >= 1; d -= .5) {86        --i;87        assert(i->first == j);88        assert(i->second == d);89      }90    assert(i == m.begin());91  }92#if TEST_STD_VER >= 1193  {94    typedef std::pair<const int, double> V;95    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),96              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),97              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)};98    std::multimap<int, double, std::less<int>, min_allocator<V>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));99    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());100    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());101    std::multimap<int, double, std::less<int>, min_allocator<V>>::iterator i;102    i                                                                              = m.begin();103    std::multimap<int, double, std::less<int>, min_allocator<V>>::const_iterator k = i;104    assert(i == k);105    for (int j = 1; j <= 8; ++j)106      for (double d = 1; d <= 2; d += .5, ++i) {107        assert(i->first == j);108        assert(i->second == d);109        i->second = 2.5;110        assert(i->second == 2.5);111      }112    assert(i == m.end());113    for (int j = 8; j >= 1; --j)114      for (double d = 1; d <= 2; d += .5) {115        --i;116        assert(i->first == j);117        assert(i->second == 2.5);118        i->second = d;119        assert(i->second == d);120      }121    assert(i == m.begin());122  }123  {124    typedef std::pair<const int, double> V;125    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),126              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),127              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)};128    const std::multimap<int, double, std::less<int>, min_allocator<V>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));129    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());130    assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());131    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());132    assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());133    std::multimap<int, double, std::less<int>, min_allocator<V>>::const_iterator i;134    i = m.begin();135    for (int j = 1; j <= 8; ++j)136      for (double d = 1; d <= 2; d += .5, ++i) {137        assert(i->first == j);138        assert(i->second == d);139      }140    assert(i == m.end());141    for (int j = 8; j >= 1; --j)142      for (double d = 2; d >= 1; d -= .5) {143        --i;144        assert(i->first == j);145        assert(i->second == d);146      }147    assert(i == m.begin());148  }149#endif150#if TEST_STD_VER > 11151  { // N3644 testing152    typedef std::multimap<int, double> C;153    C::iterator ii1{}, ii2{};154    C::iterator ii4 = ii1;155    C::const_iterator cii{};156    assert(ii1 == ii2);157    assert(ii1 == ii4);158 159    assert(!(ii1 != ii2));160 161    assert((ii1 == cii));162    assert((cii == ii1));163    assert(!(ii1 != cii));164    assert(!(cii != ii1));165  }166#endif167 168  return 0;169}170