brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · 1a18cbc Raw
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