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