brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · fee8bf9 Raw
142 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// <set>10 11// class multiset12 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 <set>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 int V;38    V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8};39    std::multiset<int> m(ar, ar + sizeof(ar) / sizeof(ar[0]));40    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());41    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());42    std::multiset<int>::iterator i;43    i                                    = m.begin();44    std::multiset<int>::const_iterator k = i;45    assert(i == k);46    for (int j = 1; j <= 8; ++j)47      for (int n = 0; n < 3; ++n, ++i)48        assert(*i == j);49    assert(i == m.end());50    for (int j = 8; j >= 1; --j)51      for (int n = 0; n < 3; ++n) {52        --i;53        assert(*i == j);54      }55    assert(i == m.begin());56  }57  {58    typedef int V;59    V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8};60    const std::multiset<int> m(ar, ar + sizeof(ar) / sizeof(ar[0]));61    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());62    assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());63    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());64    assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());65    std::multiset<int>::const_iterator i;66    i = m.begin();67    for (int j = 1; j <= 8; ++j)68      for (int k = 0; k < 3; ++k, ++i)69        assert(*i == j);70    assert(i == m.end());71    for (int j = 8; j >= 1; --j)72      for (int k = 0; k < 3; ++k) {73        --i;74        assert(*i == j);75      }76    assert(i == m.begin());77  }78#if TEST_STD_VER >= 1179  {80    typedef int V;81    V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8};82    std::multiset<int, std::less<int>, min_allocator<int>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));83    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());84    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());85    std::multiset<int, std::less<int>, min_allocator<int>>::iterator i;86    i                                                                        = m.begin();87    std::multiset<int, std::less<int>, min_allocator<int>>::const_iterator k = i;88    assert(i == k);89    for (int j = 1; j <= 8; ++j)90      for (int n = 0; n < 3; ++n, ++i)91        assert(*i == j);92    assert(i == m.end());93    for (int j = 8; j >= 1; --j)94      for (int n = 0; n < 3; ++n) {95        --i;96        assert(*i == j);97      }98    assert(i == m.begin());99  }100  {101    typedef int V;102    V ar[] = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8};103    const std::multiset<int, std::less<int>, min_allocator<int>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));104    assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());105    assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());106    assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());107    assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());108    std::multiset<int, std::less<int>, min_allocator<int>>::const_iterator i;109    i = m.begin();110    for (int j = 1; j <= 8; ++j)111      for (int k = 0; k < 3; ++k, ++i)112        assert(*i == j);113    assert(i == m.end());114    for (int j = 8; j >= 1; --j)115      for (int k = 0; k < 3; ++k) {116        --i;117        assert(*i == j);118      }119    assert(i == m.begin());120  }121#endif122#if TEST_STD_VER > 11123  { // N3644 testing124    typedef std::multiset<int> C;125    C::iterator ii1{}, ii2{};126    C::iterator ii4 = ii1;127    C::const_iterator cii{};128    assert(ii1 == ii2);129    assert(ii1 == ii4);130 131    assert(!(ii1 != ii2));132 133    assert((ii1 == cii));134    assert((cii == ii1));135    assert(!(ii1 != cii));136    assert(!(cii != ii1));137  }138#endif139 140  return 0;141}142