Home | History | Annotate | Download | only in multiset
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <set>
     11 
     12 // class multiset
     13 
     14 // pair<iterator,iterator>             equal_range(const key_type& k);
     15 // pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
     16 
     17 #include <set>
     18 #include <cassert>
     19 
     20 #include "../../min_allocator.h"
     21 
     22 int main()
     23 {
     24     {
     25     typedef int V;
     26     typedef std::multiset<int> M;
     27     {
     28         typedef std::pair<M::iterator, M::iterator> R;
     29         V ar[] =
     30         {
     31             5,
     32             5,
     33             5,
     34             7,
     35             7,
     36             7,
     37             9,
     38             9,
     39             9
     40         };
     41         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     42         R r = m.equal_range(4);
     43         assert(r.first  == next(m.begin(), 0));
     44         assert(r.second == next(m.begin(), 0));
     45         r = m.equal_range(5);
     46         assert(r.first  == next(m.begin(), 0));
     47         assert(r.second == next(m.begin(), 3));
     48         r = m.equal_range(6);
     49         assert(r.first  == next(m.begin(), 3));
     50         assert(r.second == next(m.begin(), 3));
     51         r = m.equal_range(7);
     52         assert(r.first  == next(m.begin(), 3));
     53         assert(r.second == next(m.begin(), 6));
     54         r = m.equal_range(8);
     55         assert(r.first  == next(m.begin(), 6));
     56         assert(r.second == next(m.begin(), 6));
     57         r = m.equal_range(9);
     58         assert(r.first  == next(m.begin(), 6));
     59         assert(r.second == next(m.begin(), 9));
     60         r = m.equal_range(10);
     61         assert(r.first  == next(m.begin(), 9));
     62         assert(r.second == next(m.begin(), 9));
     63     }
     64     {
     65         typedef std::pair<M::const_iterator, M::const_iterator> R;
     66         V ar[] =
     67         {
     68             5,
     69             5,
     70             5,
     71             7,
     72             7,
     73             7,
     74             9,
     75             9,
     76             9
     77         };
     78         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     79         R r = m.equal_range(4);
     80         assert(r.first  == next(m.begin(), 0));
     81         assert(r.second == next(m.begin(), 0));
     82         r = m.equal_range(5);
     83         assert(r.first  == next(m.begin(), 0));
     84         assert(r.second == next(m.begin(), 3));
     85         r = m.equal_range(6);
     86         assert(r.first  == next(m.begin(), 3));
     87         assert(r.second == next(m.begin(), 3));
     88         r = m.equal_range(7);
     89         assert(r.first  == next(m.begin(), 3));
     90         assert(r.second == next(m.begin(), 6));
     91         r = m.equal_range(8);
     92         assert(r.first  == next(m.begin(), 6));
     93         assert(r.second == next(m.begin(), 6));
     94         r = m.equal_range(9);
     95         assert(r.first  == next(m.begin(), 6));
     96         assert(r.second == next(m.begin(), 9));
     97         r = m.equal_range(10);
     98         assert(r.first  == next(m.begin(), 9));
     99         assert(r.second == next(m.begin(), 9));
    100     }
    101     }
    102 #if __cplusplus >= 201103L
    103     {
    104     typedef int V;
    105     typedef std::multiset<int, std::less<int>, min_allocator<int>> M;
    106     {
    107         typedef std::pair<M::iterator, M::iterator> R;
    108         V ar[] =
    109         {
    110             5,
    111             5,
    112             5,
    113             7,
    114             7,
    115             7,
    116             9,
    117             9,
    118             9
    119         };
    120         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    121         R r = m.equal_range(4);
    122         assert(r.first  == next(m.begin(), 0));
    123         assert(r.second == next(m.begin(), 0));
    124         r = m.equal_range(5);
    125         assert(r.first  == next(m.begin(), 0));
    126         assert(r.second == next(m.begin(), 3));
    127         r = m.equal_range(6);
    128         assert(r.first  == next(m.begin(), 3));
    129         assert(r.second == next(m.begin(), 3));
    130         r = m.equal_range(7);
    131         assert(r.first  == next(m.begin(), 3));
    132         assert(r.second == next(m.begin(), 6));
    133         r = m.equal_range(8);
    134         assert(r.first  == next(m.begin(), 6));
    135         assert(r.second == next(m.begin(), 6));
    136         r = m.equal_range(9);
    137         assert(r.first  == next(m.begin(), 6));
    138         assert(r.second == next(m.begin(), 9));
    139         r = m.equal_range(10);
    140         assert(r.first  == next(m.begin(), 9));
    141         assert(r.second == next(m.begin(), 9));
    142     }
    143     {
    144         typedef std::pair<M::const_iterator, M::const_iterator> R;
    145         V ar[] =
    146         {
    147             5,
    148             5,
    149             5,
    150             7,
    151             7,
    152             7,
    153             9,
    154             9,
    155             9
    156         };
    157         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    158         R r = m.equal_range(4);
    159         assert(r.first  == next(m.begin(), 0));
    160         assert(r.second == next(m.begin(), 0));
    161         r = m.equal_range(5);
    162         assert(r.first  == next(m.begin(), 0));
    163         assert(r.second == next(m.begin(), 3));
    164         r = m.equal_range(6);
    165         assert(r.first  == next(m.begin(), 3));
    166         assert(r.second == next(m.begin(), 3));
    167         r = m.equal_range(7);
    168         assert(r.first  == next(m.begin(), 3));
    169         assert(r.second == next(m.begin(), 6));
    170         r = m.equal_range(8);
    171         assert(r.first  == next(m.begin(), 6));
    172         assert(r.second == next(m.begin(), 6));
    173         r = m.equal_range(9);
    174         assert(r.first  == next(m.begin(), 6));
    175         assert(r.second == next(m.begin(), 9));
    176         r = m.equal_range(10);
    177         assert(r.first  == next(m.begin(), 9));
    178         assert(r.second == next(m.begin(), 9));
    179     }
    180     }
    181 #endif
    182 }
    183