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