brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · e5c1d2b Raw
210 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// pair<iterator,iterator>             equal_range(const key_type& k);14// pair<const_iterator,const_iterator> equal_range(const key_type& k) const;15 16#include <set>17#include <cassert>18 19#include "test_macros.h"20#include "min_allocator.h"21#include "private_constructor.h"22 23int main(int, char**) {24  {25    typedef int V;26    typedef std::multiset<int> M;27    {28      typedef std::pair<M::iterator, M::iterator> R;29      V ar[] = {5, 5, 5, 7, 7, 7, 9, 9, 9};30      M m(ar, ar + sizeof(ar) / sizeof(ar[0]));31      R r = m.equal_range(4);32      assert(r.first == std::next(m.begin(), 0));33      assert(r.second == std::next(m.begin(), 0));34      r = m.equal_range(5);35      assert(r.first == std::next(m.begin(), 0));36      assert(r.second == std::next(m.begin(), 3));37      r = m.equal_range(6);38      assert(r.first == std::next(m.begin(), 3));39      assert(r.second == std::next(m.begin(), 3));40      r = m.equal_range(7);41      assert(r.first == std::next(m.begin(), 3));42      assert(r.second == std::next(m.begin(), 6));43      r = m.equal_range(8);44      assert(r.first == std::next(m.begin(), 6));45      assert(r.second == std::next(m.begin(), 6));46      r = m.equal_range(9);47      assert(r.first == std::next(m.begin(), 6));48      assert(r.second == std::next(m.begin(), 9));49      r = m.equal_range(10);50      assert(r.first == std::next(m.begin(), 9));51      assert(r.second == std::next(m.begin(), 9));52    }53    {54      typedef std::pair<M::const_iterator, M::const_iterator> R;55      V ar[] = {5, 5, 5, 7, 7, 7, 9, 9, 9};56      const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));57      R r = m.equal_range(4);58      assert(r.first == std::next(m.begin(), 0));59      assert(r.second == std::next(m.begin(), 0));60      r = m.equal_range(5);61      assert(r.first == std::next(m.begin(), 0));62      assert(r.second == std::next(m.begin(), 3));63      r = m.equal_range(6);64      assert(r.first == std::next(m.begin(), 3));65      assert(r.second == std::next(m.begin(), 3));66      r = m.equal_range(7);67      assert(r.first == std::next(m.begin(), 3));68      assert(r.second == std::next(m.begin(), 6));69      r = m.equal_range(8);70      assert(r.first == std::next(m.begin(), 6));71      assert(r.second == std::next(m.begin(), 6));72      r = m.equal_range(9);73      assert(r.first == std::next(m.begin(), 6));74      assert(r.second == std::next(m.begin(), 9));75      r = m.equal_range(10);76      assert(r.first == std::next(m.begin(), 9));77      assert(r.second == std::next(m.begin(), 9));78    }79  }80#if TEST_STD_VER >= 1181  {82    typedef int V;83    typedef std::multiset<int, std::less<int>, min_allocator<int>> M;84    {85      typedef std::pair<M::iterator, M::iterator> R;86      V ar[] = {5, 5, 5, 7, 7, 7, 9, 9, 9};87      M m(ar, ar + sizeof(ar) / sizeof(ar[0]));88      R r = m.equal_range(4);89      assert(r.first == std::next(m.begin(), 0));90      assert(r.second == std::next(m.begin(), 0));91      r = m.equal_range(5);92      assert(r.first == std::next(m.begin(), 0));93      assert(r.second == std::next(m.begin(), 3));94      r = m.equal_range(6);95      assert(r.first == std::next(m.begin(), 3));96      assert(r.second == std::next(m.begin(), 3));97      r = m.equal_range(7);98      assert(r.first == std::next(m.begin(), 3));99      assert(r.second == std::next(m.begin(), 6));100      r = m.equal_range(8);101      assert(r.first == std::next(m.begin(), 6));102      assert(r.second == std::next(m.begin(), 6));103      r = m.equal_range(9);104      assert(r.first == std::next(m.begin(), 6));105      assert(r.second == std::next(m.begin(), 9));106      r = m.equal_range(10);107      assert(r.first == std::next(m.begin(), 9));108      assert(r.second == std::next(m.begin(), 9));109    }110    {111      typedef std::pair<M::const_iterator, M::const_iterator> R;112      V ar[] = {5, 5, 5, 7, 7, 7, 9, 9, 9};113      const M m(ar, ar + sizeof(ar) / sizeof(ar[0]));114      R r = m.equal_range(4);115      assert(r.first == std::next(m.begin(), 0));116      assert(r.second == std::next(m.begin(), 0));117      r = m.equal_range(5);118      assert(r.first == std::next(m.begin(), 0));119      assert(r.second == std::next(m.begin(), 3));120      r = m.equal_range(6);121      assert(r.first == std::next(m.begin(), 3));122      assert(r.second == std::next(m.begin(), 3));123      r = m.equal_range(7);124      assert(r.first == std::next(m.begin(), 3));125      assert(r.second == std::next(m.begin(), 6));126      r = m.equal_range(8);127      assert(r.first == std::next(m.begin(), 6));128      assert(r.second == std::next(m.begin(), 6));129      r = m.equal_range(9);130      assert(r.first == std::next(m.begin(), 6));131      assert(r.second == std::next(m.begin(), 9));132      r = m.equal_range(10);133      assert(r.first == std::next(m.begin(), 9));134      assert(r.second == std::next(m.begin(), 9));135    }136  }137#endif138#if TEST_STD_VER > 11139  {140    typedef int V;141    typedef std::multiset<V, std::less<>> M;142    typedef std::pair<M::iterator, M::iterator> R;143    V ar[] = {5, 5, 5, 7, 7, 7, 9, 9, 9};144    M m(ar, ar + sizeof(ar) / sizeof(ar[0]));145    R r = m.equal_range(4);146    assert(r.first == std::next(m.begin(), 0));147    assert(r.second == std::next(m.begin(), 0));148    r = m.equal_range(5);149    assert(r.first == std::next(m.begin(), 0));150    assert(r.second == std::next(m.begin(), 3));151    r = m.equal_range(6);152    assert(r.first == std::next(m.begin(), 3));153    assert(r.second == std::next(m.begin(), 3));154    r = m.equal_range(7);155    assert(r.first == std::next(m.begin(), 3));156    assert(r.second == std::next(m.begin(), 6));157    r = m.equal_range(8);158    assert(r.first == std::next(m.begin(), 6));159    assert(r.second == std::next(m.begin(), 6));160    r = m.equal_range(9);161    assert(r.first == std::next(m.begin(), 6));162    assert(r.second == std::next(m.begin(), 9));163    r = m.equal_range(10);164    assert(r.first == std::next(m.begin(), 9));165    assert(r.second == std::next(m.begin(), 9));166  }167 168  {169    typedef PrivateConstructor V;170    typedef std::multiset<V, std::less<>> M;171    typedef std::pair<M::iterator, M::iterator> R;172 173    M m;174    m.insert(V::make(5));175    m.insert(V::make(5));176    m.insert(V::make(5));177    m.insert(V::make(7));178    m.insert(V::make(7));179    m.insert(V::make(7));180    m.insert(V::make(9));181    m.insert(V::make(9));182    m.insert(V::make(9));183 184    R r = m.equal_range(4);185    assert(r.first == std::next(m.begin(), 0));186    assert(r.second == std::next(m.begin(), 0));187    r = m.equal_range(5);188    assert(r.first == std::next(m.begin(), 0));189    assert(r.second == std::next(m.begin(), 3));190    r = m.equal_range(6);191    assert(r.first == std::next(m.begin(), 3));192    assert(r.second == std::next(m.begin(), 3));193    r = m.equal_range(7);194    assert(r.first == std::next(m.begin(), 3));195    assert(r.second == std::next(m.begin(), 6));196    r = m.equal_range(8);197    assert(r.first == std::next(m.begin(), 6));198    assert(r.second == std::next(m.begin(), 6));199    r = m.equal_range(9);200    assert(r.first == std::next(m.begin(), 6));201    assert(r.second == std::next(m.begin(), 9));202    r = m.equal_range(10);203    assert(r.first == std::next(m.begin(), 9));204    assert(r.second == std::next(m.begin(), 9));205  }206#endif207 208  return 0;209}210