Home | History | Annotate | Download | only in set
      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 set
     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 #include "private_constructor.hpp"
     22 
     23 int main()
     24 {
     25     {
     26     typedef int V;
     27     typedef std::set<int> M;
     28     {
     29         typedef std::pair<M::iterator, M::iterator> R;
     30         V ar[] =
     31         {
     32             5,
     33             7,
     34             9,
     35             11,
     36             13,
     37             15,
     38             17,
     39             19
     40         };
     41         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     42         R r = m.equal_range(5);
     43         assert(r.first == next(m.begin(), 0));
     44         assert(r.second == next(m.begin(), 1));
     45         r = m.equal_range(7);
     46         assert(r.first == next(m.begin(), 1));
     47         assert(r.second == next(m.begin(), 2));
     48         r = m.equal_range(9);
     49         assert(r.first == next(m.begin(), 2));
     50         assert(r.second == next(m.begin(), 3));
     51         r = m.equal_range(11);
     52         assert(r.first == next(m.begin(), 3));
     53         assert(r.second == next(m.begin(), 4));
     54         r = m.equal_range(13);
     55         assert(r.first == next(m.begin(), 4));
     56         assert(r.second == next(m.begin(), 5));
     57         r = m.equal_range(15);
     58         assert(r.first == next(m.begin(), 5));
     59         assert(r.second == next(m.begin(), 6));
     60         r = m.equal_range(17);
     61         assert(r.first == next(m.begin(), 6));
     62         assert(r.second == next(m.begin(), 7));
     63         r = m.equal_range(19);
     64         assert(r.first == next(m.begin(), 7));
     65         assert(r.second == next(m.begin(), 8));
     66         r = m.equal_range(4);
     67         assert(r.first == next(m.begin(), 0));
     68         assert(r.second == next(m.begin(), 0));
     69         r = m.equal_range(6);
     70         assert(r.first == next(m.begin(), 1));
     71         assert(r.second == next(m.begin(), 1));
     72         r = m.equal_range(8);
     73         assert(r.first == next(m.begin(), 2));
     74         assert(r.second == next(m.begin(), 2));
     75         r = m.equal_range(10);
     76         assert(r.first == next(m.begin(), 3));
     77         assert(r.second == next(m.begin(), 3));
     78         r = m.equal_range(12);
     79         assert(r.first == next(m.begin(), 4));
     80         assert(r.second == next(m.begin(), 4));
     81         r = m.equal_range(14);
     82         assert(r.first == next(m.begin(), 5));
     83         assert(r.second == next(m.begin(), 5));
     84         r = m.equal_range(16);
     85         assert(r.first == next(m.begin(), 6));
     86         assert(r.second == next(m.begin(), 6));
     87         r = m.equal_range(18);
     88         assert(r.first == next(m.begin(), 7));
     89         assert(r.second == next(m.begin(), 7));
     90         r = m.equal_range(20);
     91         assert(r.first == next(m.begin(), 8));
     92         assert(r.second == next(m.begin(), 8));
     93     }
     94     {
     95         typedef std::pair<M::const_iterator, M::const_iterator> R;
     96         V ar[] =
     97         {
     98             5,
     99             7,
    100             9,
    101             11,
    102             13,
    103             15,
    104             17,
    105             19
    106         };
    107         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    108         R r = m.equal_range(5);
    109         assert(r.first == next(m.begin(), 0));
    110         assert(r.second == next(m.begin(), 1));
    111         r = m.equal_range(7);
    112         assert(r.first == next(m.begin(), 1));
    113         assert(r.second == next(m.begin(), 2));
    114         r = m.equal_range(9);
    115         assert(r.first == next(m.begin(), 2));
    116         assert(r.second == next(m.begin(), 3));
    117         r = m.equal_range(11);
    118         assert(r.first == next(m.begin(), 3));
    119         assert(r.second == next(m.begin(), 4));
    120         r = m.equal_range(13);
    121         assert(r.first == next(m.begin(), 4));
    122         assert(r.second == next(m.begin(), 5));
    123         r = m.equal_range(15);
    124         assert(r.first == next(m.begin(), 5));
    125         assert(r.second == next(m.begin(), 6));
    126         r = m.equal_range(17);
    127         assert(r.first == next(m.begin(), 6));
    128         assert(r.second == next(m.begin(), 7));
    129         r = m.equal_range(19);
    130         assert(r.first == next(m.begin(), 7));
    131         assert(r.second == next(m.begin(), 8));
    132         r = m.equal_range(4);
    133         assert(r.first == next(m.begin(), 0));
    134         assert(r.second == next(m.begin(), 0));
    135         r = m.equal_range(6);
    136         assert(r.first == next(m.begin(), 1));
    137         assert(r.second == next(m.begin(), 1));
    138         r = m.equal_range(8);
    139         assert(r.first == next(m.begin(), 2));
    140         assert(r.second == next(m.begin(), 2));
    141         r = m.equal_range(10);
    142         assert(r.first == next(m.begin(), 3));
    143         assert(r.second == next(m.begin(), 3));
    144         r = m.equal_range(12);
    145         assert(r.first == next(m.begin(), 4));
    146         assert(r.second == next(m.begin(), 4));
    147         r = m.equal_range(14);
    148         assert(r.first == next(m.begin(), 5));
    149         assert(r.second == next(m.begin(), 5));
    150         r = m.equal_range(16);
    151         assert(r.first == next(m.begin(), 6));
    152         assert(r.second == next(m.begin(), 6));
    153         r = m.equal_range(18);
    154         assert(r.first == next(m.begin(), 7));
    155         assert(r.second == next(m.begin(), 7));
    156         r = m.equal_range(20);
    157         assert(r.first == next(m.begin(), 8));
    158         assert(r.second == next(m.begin(), 8));
    159     }
    160     }
    161 #if __cplusplus >= 201103L
    162     {
    163     typedef int V;
    164     typedef std::set<int, std::less<int>, min_allocator<int>> M;
    165     typedef std::pair<M::iterator, M::iterator> R;
    166     V ar[] =
    167     {
    168         5,
    169         7,
    170         9,
    171         11,
    172         13,
    173         15,
    174         17,
    175         19
    176     };
    177     M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    178     R r = m.equal_range(5);
    179     assert(r.first == next(m.begin(), 0));
    180     assert(r.second == next(m.begin(), 1));
    181     r = m.equal_range(7);
    182     assert(r.first == next(m.begin(), 1));
    183     assert(r.second == next(m.begin(), 2));
    184     r = m.equal_range(9);
    185     assert(r.first == next(m.begin(), 2));
    186     assert(r.second == next(m.begin(), 3));
    187     r = m.equal_range(11);
    188     assert(r.first == next(m.begin(), 3));
    189     assert(r.second == next(m.begin(), 4));
    190     r = m.equal_range(13);
    191     assert(r.first == next(m.begin(), 4));
    192     assert(r.second == next(m.begin(), 5));
    193     r = m.equal_range(15);
    194     assert(r.first == next(m.begin(), 5));
    195     assert(r.second == next(m.begin(), 6));
    196     r = m.equal_range(17);
    197     assert(r.first == next(m.begin(), 6));
    198     assert(r.second == next(m.begin(), 7));
    199     r = m.equal_range(19);
    200     assert(r.first == next(m.begin(), 7));
    201     assert(r.second == next(m.begin(), 8));
    202     r = m.equal_range(4);
    203     assert(r.first == next(m.begin(), 0));
    204     assert(r.second == next(m.begin(), 0));
    205     r = m.equal_range(6);
    206     assert(r.first == next(m.begin(), 1));
    207     assert(r.second == next(m.begin(), 1));
    208     r = m.equal_range(8);
    209     assert(r.first == next(m.begin(), 2));
    210     assert(r.second == next(m.begin(), 2));
    211     r = m.equal_range(10);
    212     assert(r.first == next(m.begin(), 3));
    213     assert(r.second == next(m.begin(), 3));
    214     r = m.equal_range(12);
    215     assert(r.first == next(m.begin(), 4));
    216     assert(r.second == next(m.begin(), 4));
    217     r = m.equal_range(14);
    218     assert(r.first == next(m.begin(), 5));
    219     assert(r.second == next(m.begin(), 5));
    220     r = m.equal_range(16);
    221     assert(r.first == next(m.begin(), 6));
    222     assert(r.second == next(m.begin(), 6));
    223     r = m.equal_range(18);
    224     assert(r.first == next(m.begin(), 7));
    225     assert(r.second == next(m.begin(), 7));
    226     r = m.equal_range(20);
    227     assert(r.first == next(m.begin(), 8));
    228     assert(r.second == next(m.begin(), 8));
    229     }
    230 #endif
    231 #if _LIBCPP_STD_VER > 11
    232     {
    233     typedef int V;
    234     typedef std::set<V, std::less<>> M;
    235     {
    236         typedef std::pair<M::iterator, M::iterator> R;
    237         V ar[] =
    238         {
    239             5,
    240             7,
    241             9,
    242             11,
    243             13,
    244             15,
    245             17,
    246             19
    247         };
    248         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    249         R r = m.equal_range(5);
    250         assert(r.first == next(m.begin(), 0));
    251         assert(r.second == next(m.begin(), 1));
    252         r = m.equal_range(7);
    253         assert(r.first == next(m.begin(), 1));
    254         assert(r.second == next(m.begin(), 2));
    255         r = m.equal_range(9);
    256         assert(r.first == next(m.begin(), 2));
    257         assert(r.second == next(m.begin(), 3));
    258         r = m.equal_range(11);
    259         assert(r.first == next(m.begin(), 3));
    260         assert(r.second == next(m.begin(), 4));
    261         r = m.equal_range(13);
    262         assert(r.first == next(m.begin(), 4));
    263         assert(r.second == next(m.begin(), 5));
    264         r = m.equal_range(15);
    265         assert(r.first == next(m.begin(), 5));
    266         assert(r.second == next(m.begin(), 6));
    267         r = m.equal_range(17);
    268         assert(r.first == next(m.begin(), 6));
    269         assert(r.second == next(m.begin(), 7));
    270         r = m.equal_range(19);
    271         assert(r.first == next(m.begin(), 7));
    272         assert(r.second == next(m.begin(), 8));
    273         r = m.equal_range(4);
    274         assert(r.first == next(m.begin(), 0));
    275         assert(r.second == next(m.begin(), 0));
    276         r = m.equal_range(6);
    277         assert(r.first == next(m.begin(), 1));
    278         assert(r.second == next(m.begin(), 1));
    279         r = m.equal_range(8);
    280         assert(r.first == next(m.begin(), 2));
    281         assert(r.second == next(m.begin(), 2));
    282         r = m.equal_range(10);
    283         assert(r.first == next(m.begin(), 3));
    284         assert(r.second == next(m.begin(), 3));
    285         r = m.equal_range(12);
    286         assert(r.first == next(m.begin(), 4));
    287         assert(r.second == next(m.begin(), 4));
    288         r = m.equal_range(14);
    289         assert(r.first == next(m.begin(), 5));
    290         assert(r.second == next(m.begin(), 5));
    291         r = m.equal_range(16);
    292         assert(r.first == next(m.begin(), 6));
    293         assert(r.second == next(m.begin(), 6));
    294         r = m.equal_range(18);
    295         assert(r.first == next(m.begin(), 7));
    296         assert(r.second == next(m.begin(), 7));
    297         r = m.equal_range(20);
    298         assert(r.first == next(m.begin(), 8));
    299         assert(r.second == next(m.begin(), 8));
    300         }
    301     }
    302     {
    303     typedef PrivateConstructor V;
    304     typedef std::set<V, std::less<>> M;
    305     typedef std::pair<M::iterator, M::iterator> R;
    306 
    307     M m;
    308     m.insert ( V::make ( 5 ));
    309     m.insert ( V::make ( 7 ));
    310     m.insert ( V::make ( 9 ));
    311     m.insert ( V::make ( 11 ));
    312     m.insert ( V::make ( 13 ));
    313     m.insert ( V::make ( 15 ));
    314     m.insert ( V::make ( 17 ));
    315     m.insert ( V::make ( 19 ));
    316 
    317     R r = m.equal_range(5);
    318     assert(r.first == next(m.begin(), 0));
    319     assert(r.second == next(m.begin(), 1));
    320     r = m.equal_range(7);
    321     assert(r.first == next(m.begin(), 1));
    322     assert(r.second == next(m.begin(), 2));
    323     r = m.equal_range(9);
    324     assert(r.first == next(m.begin(), 2));
    325     assert(r.second == next(m.begin(), 3));
    326     r = m.equal_range(11);
    327     assert(r.first == next(m.begin(), 3));
    328     assert(r.second == next(m.begin(), 4));
    329     r = m.equal_range(13);
    330     assert(r.first == next(m.begin(), 4));
    331     assert(r.second == next(m.begin(), 5));
    332     r = m.equal_range(15);
    333     assert(r.first == next(m.begin(), 5));
    334     assert(r.second == next(m.begin(), 6));
    335     r = m.equal_range(17);
    336     assert(r.first == next(m.begin(), 6));
    337     assert(r.second == next(m.begin(), 7));
    338     r = m.equal_range(19);
    339     assert(r.first == next(m.begin(), 7));
    340     assert(r.second == next(m.begin(), 8));
    341     r = m.equal_range(4);
    342     assert(r.first == next(m.begin(), 0));
    343     assert(r.second == next(m.begin(), 0));
    344     r = m.equal_range(6);
    345     assert(r.first == next(m.begin(), 1));
    346     assert(r.second == next(m.begin(), 1));
    347     r = m.equal_range(8);
    348     assert(r.first == next(m.begin(), 2));
    349     assert(r.second == next(m.begin(), 2));
    350     r = m.equal_range(10);
    351     assert(r.first == next(m.begin(), 3));
    352     assert(r.second == next(m.begin(), 3));
    353     r = m.equal_range(12);
    354     assert(r.first == next(m.begin(), 4));
    355     assert(r.second == next(m.begin(), 4));
    356     r = m.equal_range(14);
    357     assert(r.first == next(m.begin(), 5));
    358     assert(r.second == next(m.begin(), 5));
    359     r = m.equal_range(16);
    360     assert(r.first == next(m.begin(), 6));
    361     assert(r.second == next(m.begin(), 6));
    362     r = m.equal_range(18);
    363     assert(r.first == next(m.begin(), 7));
    364     assert(r.second == next(m.begin(), 7));
    365     r = m.equal_range(20);
    366     assert(r.first == next(m.begin(), 8));
    367     assert(r.second == next(m.begin(), 8));
    368     }
    369 #endif
    370 }
    371