134 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 set12 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::set<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::set<int>::iterator i;43 i = m.begin();44 std::set<int>::const_iterator k = i;45 assert(i == k);46 for (int j = 1; j <= static_cast<int>(m.size()); ++j, ++i)47 assert(*i == j);48 assert(i == m.end());49 for (int j = static_cast<int>(m.size()); j >= 1; --j) {50 --i;51 assert(*i == j);52 }53 assert(i == m.begin());54 }55 {56 typedef int V;57 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};58 const std::set<int> m(ar, ar + sizeof(ar) / sizeof(ar[0]));59 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());60 assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());61 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());62 assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());63 std::set<int>::const_iterator i;64 i = m.begin();65 for (int j = 1; j <= static_cast<int>(m.size()); ++j, ++i)66 assert(*i == j);67 assert(i == m.end());68 for (int j = static_cast<int>(m.size()); j >= 1; --j) {69 --i;70 assert(*i == j);71 }72 assert(i == m.begin());73 }74#if TEST_STD_VER >= 1175 {76 typedef int V;77 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};78 std::set<int, std::less<int>, min_allocator<int>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));79 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());80 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());81 std::set<int, std::less<int>, min_allocator<int>>::iterator i;82 i = m.begin();83 std::set<int, std::less<int>, min_allocator<int>>::const_iterator k = i;84 assert(i == k);85 for (int j = 1; j <= static_cast<int>(m.size()); ++j, ++i)86 assert(*i == j);87 assert(i == m.end());88 for (int j = static_cast<int>(m.size()); j >= 1; --j) {89 --i;90 assert(*i == j);91 }92 assert(i == m.begin());93 }94 {95 typedef int V;96 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};97 const std::set<int, std::less<int>, min_allocator<int>> m(ar, ar + sizeof(ar) / sizeof(ar[0]));98 assert(static_cast<std::size_t>(std::distance(m.begin(), m.end())) == m.size());99 assert(static_cast<std::size_t>(std::distance(m.cbegin(), m.cend())) == m.size());100 assert(static_cast<std::size_t>(std::distance(m.rbegin(), m.rend())) == m.size());101 assert(static_cast<std::size_t>(std::distance(m.crbegin(), m.crend())) == m.size());102 std::set<int, std::less<int>, min_allocator<int>>::const_iterator i;103 i = m.begin();104 for (int j = 1; j <= static_cast<int>(m.size()); ++j, ++i)105 assert(*i == j);106 assert(i == m.end());107 for (int j = static_cast<int>(m.size()); j >= 1; --j) {108 --i;109 assert(*i == j);110 }111 assert(i == m.begin());112 }113#endif114#if TEST_STD_VER > 11115 { // N3644 testing116 typedef std::set<int> C;117 C::iterator ii1{}, ii2{};118 C::iterator ii4 = ii1;119 C::const_iterator cii{};120 assert(ii1 == ii2);121 assert(ii1 == ii4);122 123 assert(!(ii1 != ii2));124 125 assert((ii1 == cii));126 assert((cii == ii1));127 assert(!(ii1 != cii));128 assert(!(cii != ii1));129 }130#endif131 132 return 0;133}134