Home | History | Annotate | Download | only in map.ops
      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 // <map>
     11 
     12 // class map
     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 <map>
     18 #include <cassert>
     19 
     20 #include "min_allocator.h"
     21 #include "private_constructor.hpp"
     22 #include "is_transparent.h"
     23 
     24 int main()
     25 {
     26     {
     27     typedef std::pair<const int, double> V;
     28     typedef std::map<int, double> M;
     29     {
     30         typedef std::pair<M::iterator, M::iterator> R;
     31         V ar[] =
     32         {
     33             V(5, 5),
     34             V(7, 6),
     35             V(9, 7),
     36             V(11, 8),
     37             V(13, 9),
     38             V(15, 10),
     39             V(17, 11),
     40             V(19, 12)
     41         };
     42         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     43         R r = m.equal_range(5);
     44         assert(r.first == next(m.begin(), 0));
     45         assert(r.second == next(m.begin(), 1));
     46         r = m.equal_range(7);
     47         assert(r.first == next(m.begin(), 1));
     48         assert(r.second == next(m.begin(), 2));
     49         r = m.equal_range(9);
     50         assert(r.first == next(m.begin(), 2));
     51         assert(r.second == next(m.begin(), 3));
     52         r = m.equal_range(11);
     53         assert(r.first == next(m.begin(), 3));
     54         assert(r.second == next(m.begin(), 4));
     55         r = m.equal_range(13);
     56         assert(r.first == next(m.begin(), 4));
     57         assert(r.second == next(m.begin(), 5));
     58         r = m.equal_range(15);
     59         assert(r.first == next(m.begin(), 5));
     60         assert(r.second == next(m.begin(), 6));
     61         r = m.equal_range(17);
     62         assert(r.first == next(m.begin(), 6));
     63         assert(r.second == next(m.begin(), 7));
     64         r = m.equal_range(19);
     65         assert(r.first == next(m.begin(), 7));
     66         assert(r.second == next(m.begin(), 8));
     67         r = m.equal_range(4);
     68         assert(r.first == next(m.begin(), 0));
     69         assert(r.second == next(m.begin(), 0));
     70         r = m.equal_range(6);
     71         assert(r.first == next(m.begin(), 1));
     72         assert(r.second == next(m.begin(), 1));
     73         r = m.equal_range(8);
     74         assert(r.first == next(m.begin(), 2));
     75         assert(r.second == next(m.begin(), 2));
     76         r = m.equal_range(10);
     77         assert(r.first == next(m.begin(), 3));
     78         assert(r.second == next(m.begin(), 3));
     79         r = m.equal_range(12);
     80         assert(r.first == next(m.begin(), 4));
     81         assert(r.second == next(m.begin(), 4));
     82         r = m.equal_range(14);
     83         assert(r.first == next(m.begin(), 5));
     84         assert(r.second == next(m.begin(), 5));
     85         r = m.equal_range(16);
     86         assert(r.first == next(m.begin(), 6));
     87         assert(r.second == next(m.begin(), 6));
     88         r = m.equal_range(18);
     89         assert(r.first == next(m.begin(), 7));
     90         assert(r.second == next(m.begin(), 7));
     91         r = m.equal_range(20);
     92         assert(r.first == next(m.begin(), 8));
     93         assert(r.second == next(m.begin(), 8));
     94     }
     95     {
     96         typedef std::pair<M::const_iterator, M::const_iterator> R;
     97         V ar[] =
     98         {
     99             V(5, 5),
    100             V(7, 6),
    101             V(9, 7),
    102             V(11, 8),
    103             V(13, 9),
    104             V(15, 10),
    105             V(17, 11),
    106             V(19, 12)
    107         };
    108         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    109         R r = m.equal_range(5);
    110         assert(r.first == next(m.begin(), 0));
    111         assert(r.second == next(m.begin(), 1));
    112         r = m.equal_range(7);
    113         assert(r.first == next(m.begin(), 1));
    114         assert(r.second == next(m.begin(), 2));
    115         r = m.equal_range(9);
    116         assert(r.first == next(m.begin(), 2));
    117         assert(r.second == next(m.begin(), 3));
    118         r = m.equal_range(11);
    119         assert(r.first == next(m.begin(), 3));
    120         assert(r.second == next(m.begin(), 4));
    121         r = m.equal_range(13);
    122         assert(r.first == next(m.begin(), 4));
    123         assert(r.second == next(m.begin(), 5));
    124         r = m.equal_range(15);
    125         assert(r.first == next(m.begin(), 5));
    126         assert(r.second == next(m.begin(), 6));
    127         r = m.equal_range(17);
    128         assert(r.first == next(m.begin(), 6));
    129         assert(r.second == next(m.begin(), 7));
    130         r = m.equal_range(19);
    131         assert(r.first == next(m.begin(), 7));
    132         assert(r.second == next(m.begin(), 8));
    133         r = m.equal_range(4);
    134         assert(r.first == next(m.begin(), 0));
    135         assert(r.second == next(m.begin(), 0));
    136         r = m.equal_range(6);
    137         assert(r.first == next(m.begin(), 1));
    138         assert(r.second == next(m.begin(), 1));
    139         r = m.equal_range(8);
    140         assert(r.first == next(m.begin(), 2));
    141         assert(r.second == next(m.begin(), 2));
    142         r = m.equal_range(10);
    143         assert(r.first == next(m.begin(), 3));
    144         assert(r.second == next(m.begin(), 3));
    145         r = m.equal_range(12);
    146         assert(r.first == next(m.begin(), 4));
    147         assert(r.second == next(m.begin(), 4));
    148         r = m.equal_range(14);
    149         assert(r.first == next(m.begin(), 5));
    150         assert(r.second == next(m.begin(), 5));
    151         r = m.equal_range(16);
    152         assert(r.first == next(m.begin(), 6));
    153         assert(r.second == next(m.begin(), 6));
    154         r = m.equal_range(18);
    155         assert(r.first == next(m.begin(), 7));
    156         assert(r.second == next(m.begin(), 7));
    157         r = m.equal_range(20);
    158         assert(r.first == next(m.begin(), 8));
    159         assert(r.second == next(m.begin(), 8));
    160     }
    161     }
    162 #if __cplusplus >= 201103L
    163     {
    164     typedef std::pair<const int, double> V;
    165     typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
    166     {
    167         typedef std::pair<M::iterator, M::iterator> R;
    168         V ar[] =
    169         {
    170             V(5, 5),
    171             V(7, 6),
    172             V(9, 7),
    173             V(11, 8),
    174             V(13, 9),
    175             V(15, 10),
    176             V(17, 11),
    177             V(19, 12)
    178         };
    179         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    180         R r = m.equal_range(5);
    181         assert(r.first == next(m.begin(), 0));
    182         assert(r.second == next(m.begin(), 1));
    183         r = m.equal_range(7);
    184         assert(r.first == next(m.begin(), 1));
    185         assert(r.second == next(m.begin(), 2));
    186         r = m.equal_range(9);
    187         assert(r.first == next(m.begin(), 2));
    188         assert(r.second == next(m.begin(), 3));
    189         r = m.equal_range(11);
    190         assert(r.first == next(m.begin(), 3));
    191         assert(r.second == next(m.begin(), 4));
    192         r = m.equal_range(13);
    193         assert(r.first == next(m.begin(), 4));
    194         assert(r.second == next(m.begin(), 5));
    195         r = m.equal_range(15);
    196         assert(r.first == next(m.begin(), 5));
    197         assert(r.second == next(m.begin(), 6));
    198         r = m.equal_range(17);
    199         assert(r.first == next(m.begin(), 6));
    200         assert(r.second == next(m.begin(), 7));
    201         r = m.equal_range(19);
    202         assert(r.first == next(m.begin(), 7));
    203         assert(r.second == next(m.begin(), 8));
    204         r = m.equal_range(4);
    205         assert(r.first == next(m.begin(), 0));
    206         assert(r.second == next(m.begin(), 0));
    207         r = m.equal_range(6);
    208         assert(r.first == next(m.begin(), 1));
    209         assert(r.second == next(m.begin(), 1));
    210         r = m.equal_range(8);
    211         assert(r.first == next(m.begin(), 2));
    212         assert(r.second == next(m.begin(), 2));
    213         r = m.equal_range(10);
    214         assert(r.first == next(m.begin(), 3));
    215         assert(r.second == next(m.begin(), 3));
    216         r = m.equal_range(12);
    217         assert(r.first == next(m.begin(), 4));
    218         assert(r.second == next(m.begin(), 4));
    219         r = m.equal_range(14);
    220         assert(r.first == next(m.begin(), 5));
    221         assert(r.second == next(m.begin(), 5));
    222         r = m.equal_range(16);
    223         assert(r.first == next(m.begin(), 6));
    224         assert(r.second == next(m.begin(), 6));
    225         r = m.equal_range(18);
    226         assert(r.first == next(m.begin(), 7));
    227         assert(r.second == next(m.begin(), 7));
    228         r = m.equal_range(20);
    229         assert(r.first == next(m.begin(), 8));
    230         assert(r.second == next(m.begin(), 8));
    231     }
    232     {
    233         typedef std::pair<M::const_iterator, M::const_iterator> R;
    234         V ar[] =
    235         {
    236             V(5, 5),
    237             V(7, 6),
    238             V(9, 7),
    239             V(11, 8),
    240             V(13, 9),
    241             V(15, 10),
    242             V(17, 11),
    243             V(19, 12)
    244         };
    245         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    246         R r = m.equal_range(5);
    247         assert(r.first == next(m.begin(), 0));
    248         assert(r.second == next(m.begin(), 1));
    249         r = m.equal_range(7);
    250         assert(r.first == next(m.begin(), 1));
    251         assert(r.second == next(m.begin(), 2));
    252         r = m.equal_range(9);
    253         assert(r.first == next(m.begin(), 2));
    254         assert(r.second == next(m.begin(), 3));
    255         r = m.equal_range(11);
    256         assert(r.first == next(m.begin(), 3));
    257         assert(r.second == next(m.begin(), 4));
    258         r = m.equal_range(13);
    259         assert(r.first == next(m.begin(), 4));
    260         assert(r.second == next(m.begin(), 5));
    261         r = m.equal_range(15);
    262         assert(r.first == next(m.begin(), 5));
    263         assert(r.second == next(m.begin(), 6));
    264         r = m.equal_range(17);
    265         assert(r.first == next(m.begin(), 6));
    266         assert(r.second == next(m.begin(), 7));
    267         r = m.equal_range(19);
    268         assert(r.first == next(m.begin(), 7));
    269         assert(r.second == next(m.begin(), 8));
    270         r = m.equal_range(4);
    271         assert(r.first == next(m.begin(), 0));
    272         assert(r.second == next(m.begin(), 0));
    273         r = m.equal_range(6);
    274         assert(r.first == next(m.begin(), 1));
    275         assert(r.second == next(m.begin(), 1));
    276         r = m.equal_range(8);
    277         assert(r.first == next(m.begin(), 2));
    278         assert(r.second == next(m.begin(), 2));
    279         r = m.equal_range(10);
    280         assert(r.first == next(m.begin(), 3));
    281         assert(r.second == next(m.begin(), 3));
    282         r = m.equal_range(12);
    283         assert(r.first == next(m.begin(), 4));
    284         assert(r.second == next(m.begin(), 4));
    285         r = m.equal_range(14);
    286         assert(r.first == next(m.begin(), 5));
    287         assert(r.second == next(m.begin(), 5));
    288         r = m.equal_range(16);
    289         assert(r.first == next(m.begin(), 6));
    290         assert(r.second == next(m.begin(), 6));
    291         r = m.equal_range(18);
    292         assert(r.first == next(m.begin(), 7));
    293         assert(r.second == next(m.begin(), 7));
    294         r = m.equal_range(20);
    295         assert(r.first == next(m.begin(), 8));
    296         assert(r.second == next(m.begin(), 8));
    297     }
    298     }
    299 #endif
    300 #if _LIBCPP_STD_VER > 11
    301     {
    302     typedef std::pair<const int, double> V;
    303     typedef std::map<int, double, std::less<>> M;
    304     typedef std::pair<M::iterator, M::iterator> R;
    305 
    306     V ar[] =
    307     {
    308         V(5, 5),
    309         V(7, 6),
    310         V(9, 7),
    311         V(11, 8),
    312         V(13, 9),
    313         V(15, 10),
    314         V(17, 11),
    315         V(19, 12)
    316     };
    317     M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    318     R r = m.equal_range(5);
    319     assert(r.first == next(m.begin(), 0));
    320     assert(r.second == next(m.begin(), 1));
    321     r = m.equal_range(7);
    322     assert(r.first == next(m.begin(), 1));
    323     assert(r.second == next(m.begin(), 2));
    324     r = m.equal_range(9);
    325     assert(r.first == next(m.begin(), 2));
    326     assert(r.second == next(m.begin(), 3));
    327     r = m.equal_range(11);
    328     assert(r.first == next(m.begin(), 3));
    329     assert(r.second == next(m.begin(), 4));
    330     r = m.equal_range(13);
    331     assert(r.first == next(m.begin(), 4));
    332     assert(r.second == next(m.begin(), 5));
    333     r = m.equal_range(15);
    334     assert(r.first == next(m.begin(), 5));
    335     assert(r.second == next(m.begin(), 6));
    336     r = m.equal_range(17);
    337     assert(r.first == next(m.begin(), 6));
    338     assert(r.second == next(m.begin(), 7));
    339     r = m.equal_range(19);
    340     assert(r.first == next(m.begin(), 7));
    341     assert(r.second == next(m.begin(), 8));
    342     r = m.equal_range(4);
    343     assert(r.first == next(m.begin(), 0));
    344     assert(r.second == next(m.begin(), 0));
    345     r = m.equal_range(6);
    346     assert(r.first == next(m.begin(), 1));
    347     assert(r.second == next(m.begin(), 1));
    348     r = m.equal_range(8);
    349     assert(r.first == next(m.begin(), 2));
    350     assert(r.second == next(m.begin(), 2));
    351     r = m.equal_range(10);
    352     assert(r.first == next(m.begin(), 3));
    353     assert(r.second == next(m.begin(), 3));
    354     r = m.equal_range(12);
    355     assert(r.first == next(m.begin(), 4));
    356     assert(r.second == next(m.begin(), 4));
    357     r = m.equal_range(14);
    358     assert(r.first == next(m.begin(), 5));
    359     assert(r.second == next(m.begin(), 5));
    360     r = m.equal_range(16);
    361     assert(r.first == next(m.begin(), 6));
    362     assert(r.second == next(m.begin(), 6));
    363     r = m.equal_range(18);
    364     assert(r.first == next(m.begin(), 7));
    365     assert(r.second == next(m.begin(), 7));
    366     r = m.equal_range(20);
    367     assert(r.first == next(m.begin(), 8));
    368     assert(r.second == next(m.begin(), 8));
    369 
    370     r = m.equal_range(C2Int(5));
    371     assert(r.first == next(m.begin(), 0));
    372     assert(r.second == next(m.begin(), 1));
    373     r = m.equal_range(C2Int(7));
    374     assert(r.first == next(m.begin(), 1));
    375     assert(r.second == next(m.begin(), 2));
    376     r = m.equal_range(C2Int(9));
    377     assert(r.first == next(m.begin(), 2));
    378     assert(r.second == next(m.begin(), 3));
    379     r = m.equal_range(C2Int(11));
    380     assert(r.first == next(m.begin(), 3));
    381     assert(r.second == next(m.begin(), 4));
    382     r = m.equal_range(C2Int(13));
    383     assert(r.first == next(m.begin(), 4));
    384     assert(r.second == next(m.begin(), 5));
    385     r = m.equal_range(C2Int(15));
    386     assert(r.first == next(m.begin(), 5));
    387     assert(r.second == next(m.begin(), 6));
    388     r = m.equal_range(C2Int(17));
    389     assert(r.first == next(m.begin(), 6));
    390     assert(r.second == next(m.begin(), 7));
    391     r = m.equal_range(C2Int(19));
    392     assert(r.first == next(m.begin(), 7));
    393     assert(r.second == next(m.begin(), 8));
    394     r = m.equal_range(C2Int(4));
    395     assert(r.first == next(m.begin(), 0));
    396     assert(r.second == next(m.begin(), 0));
    397     r = m.equal_range(C2Int(6));
    398     assert(r.first == next(m.begin(), 1));
    399     assert(r.second == next(m.begin(), 1));
    400     r = m.equal_range(C2Int(8));
    401     assert(r.first == next(m.begin(), 2));
    402     assert(r.second == next(m.begin(), 2));
    403     r = m.equal_range(C2Int(10));
    404     assert(r.first == next(m.begin(), 3));
    405     assert(r.second == next(m.begin(), 3));
    406     r = m.equal_range(C2Int(12));
    407     assert(r.first == next(m.begin(), 4));
    408     assert(r.second == next(m.begin(), 4));
    409     r = m.equal_range(C2Int(14));
    410     assert(r.first == next(m.begin(), 5));
    411     assert(r.second == next(m.begin(), 5));
    412     r = m.equal_range(C2Int(16));
    413     assert(r.first == next(m.begin(), 6));
    414     assert(r.second == next(m.begin(), 6));
    415     r = m.equal_range(C2Int(18));
    416     assert(r.first == next(m.begin(), 7));
    417     assert(r.second == next(m.begin(), 7));
    418     r = m.equal_range(C2Int(20));
    419     assert(r.first == next(m.begin(), 8));
    420     assert(r.second == next(m.begin(), 8));
    421     }
    422     {
    423     typedef PrivateConstructor PC;
    424     typedef std::map<PC, double, std::less<>> M;
    425     typedef std::pair<M::iterator, M::iterator> R;
    426 
    427     M m;
    428     m [ PC::make(5)  ] = 5;
    429     m [ PC::make(7)  ] = 6;
    430     m [ PC::make(9)  ] = 7;
    431     m [ PC::make(11) ] = 8;
    432     m [ PC::make(13) ] = 9;
    433     m [ PC::make(15) ] = 10;
    434     m [ PC::make(17) ] = 11;
    435     m [ PC::make(19) ] = 12;
    436 
    437     R r = m.equal_range(5);
    438     assert(r.first == next(m.begin(), 0));
    439     assert(r.second == next(m.begin(), 1));
    440     r = m.equal_range(7);
    441     assert(r.first == next(m.begin(), 1));
    442     assert(r.second == next(m.begin(), 2));
    443     r = m.equal_range(9);
    444     assert(r.first == next(m.begin(), 2));
    445     assert(r.second == next(m.begin(), 3));
    446     r = m.equal_range(11);
    447     assert(r.first == next(m.begin(), 3));
    448     assert(r.second == next(m.begin(), 4));
    449     r = m.equal_range(13);
    450     assert(r.first == next(m.begin(), 4));
    451     assert(r.second == next(m.begin(), 5));
    452     r = m.equal_range(15);
    453     assert(r.first == next(m.begin(), 5));
    454     assert(r.second == next(m.begin(), 6));
    455     r = m.equal_range(17);
    456     assert(r.first == next(m.begin(), 6));
    457     assert(r.second == next(m.begin(), 7));
    458     r = m.equal_range(19);
    459     assert(r.first == next(m.begin(), 7));
    460     assert(r.second == next(m.begin(), 8));
    461     r = m.equal_range(4);
    462     assert(r.first == next(m.begin(), 0));
    463     assert(r.second == next(m.begin(), 0));
    464     r = m.equal_range(6);
    465     assert(r.first == next(m.begin(), 1));
    466     assert(r.second == next(m.begin(), 1));
    467     r = m.equal_range(8);
    468     assert(r.first == next(m.begin(), 2));
    469     assert(r.second == next(m.begin(), 2));
    470     r = m.equal_range(10);
    471     assert(r.first == next(m.begin(), 3));
    472     assert(r.second == next(m.begin(), 3));
    473     r = m.equal_range(12);
    474     assert(r.first == next(m.begin(), 4));
    475     assert(r.second == next(m.begin(), 4));
    476     r = m.equal_range(14);
    477     assert(r.first == next(m.begin(), 5));
    478     assert(r.second == next(m.begin(), 5));
    479     r = m.equal_range(16);
    480     assert(r.first == next(m.begin(), 6));
    481     assert(r.second == next(m.begin(), 6));
    482     r = m.equal_range(18);
    483     assert(r.first == next(m.begin(), 7));
    484     assert(r.second == next(m.begin(), 7));
    485     r = m.equal_range(20);
    486     assert(r.first == next(m.begin(), 8));
    487     assert(r.second == next(m.begin(), 8));
    488     }
    489 #endif
    490 }
    491