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 //       iterator find(const key_type& k);
     15 // const_iterator find(const key_type& k) const;
     16 
     17 #include <map>
     18 #include <cassert>
     19 
     20 #include "test_macros.h"
     21 #include "min_allocator.h"
     22 #include "private_constructor.hpp"
     23 #include "is_transparent.h"
     24 
     25 int main()
     26 {
     27     {
     28     typedef std::pair<const int, double> V;
     29     typedef std::map<int, double> M;
     30     {
     31         typedef M::iterator R;
     32         V ar[] =
     33         {
     34             V(5, 5),
     35             V(6, 6),
     36             V(7, 7),
     37             V(8, 8),
     38             V(9, 9),
     39             V(10, 10),
     40             V(11, 11),
     41             V(12, 12)
     42         };
     43         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     44         R r = m.find(5);
     45         assert(r == m.begin());
     46         r = m.find(6);
     47         assert(r == next(m.begin()));
     48         r = m.find(7);
     49         assert(r == next(m.begin(), 2));
     50         r = m.find(8);
     51         assert(r == next(m.begin(), 3));
     52         r = m.find(9);
     53         assert(r == next(m.begin(), 4));
     54         r = m.find(10);
     55         assert(r == next(m.begin(), 5));
     56         r = m.find(11);
     57         assert(r == next(m.begin(), 6));
     58         r = m.find(12);
     59         assert(r == next(m.begin(), 7));
     60         r = m.find(4);
     61         assert(r == next(m.begin(), 8));
     62     }
     63     {
     64         typedef M::const_iterator R;
     65         V ar[] =
     66         {
     67             V(5, 5),
     68             V(6, 6),
     69             V(7, 7),
     70             V(8, 8),
     71             V(9, 9),
     72             V(10, 10),
     73             V(11, 11),
     74             V(12, 12)
     75         };
     76         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     77         R r = m.find(5);
     78         assert(r == m.begin());
     79         r = m.find(6);
     80         assert(r == next(m.begin()));
     81         r = m.find(7);
     82         assert(r == next(m.begin(), 2));
     83         r = m.find(8);
     84         assert(r == next(m.begin(), 3));
     85         r = m.find(9);
     86         assert(r == next(m.begin(), 4));
     87         r = m.find(10);
     88         assert(r == next(m.begin(), 5));
     89         r = m.find(11);
     90         assert(r == next(m.begin(), 6));
     91         r = m.find(12);
     92         assert(r == next(m.begin(), 7));
     93         r = m.find(4);
     94         assert(r == next(m.begin(), 8));
     95     }
     96     }
     97 #if TEST_STD_VER >= 11
     98     {
     99     typedef std::pair<const int, double> V;
    100     typedef std::map<int, double, std::less<int>, min_allocator<V>> M;
    101     {
    102         typedef M::iterator R;
    103         V ar[] =
    104         {
    105             V(5, 5),
    106             V(6, 6),
    107             V(7, 7),
    108             V(8, 8),
    109             V(9, 9),
    110             V(10, 10),
    111             V(11, 11),
    112             V(12, 12)
    113         };
    114         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    115         R r = m.find(5);
    116         assert(r == m.begin());
    117         r = m.find(6);
    118         assert(r == next(m.begin()));
    119         r = m.find(7);
    120         assert(r == next(m.begin(), 2));
    121         r = m.find(8);
    122         assert(r == next(m.begin(), 3));
    123         r = m.find(9);
    124         assert(r == next(m.begin(), 4));
    125         r = m.find(10);
    126         assert(r == next(m.begin(), 5));
    127         r = m.find(11);
    128         assert(r == next(m.begin(), 6));
    129         r = m.find(12);
    130         assert(r == next(m.begin(), 7));
    131         r = m.find(4);
    132         assert(r == next(m.begin(), 8));
    133     }
    134     {
    135         typedef M::const_iterator R;
    136         V ar[] =
    137         {
    138             V(5, 5),
    139             V(6, 6),
    140             V(7, 7),
    141             V(8, 8),
    142             V(9, 9),
    143             V(10, 10),
    144             V(11, 11),
    145             V(12, 12)
    146         };
    147         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    148         R r = m.find(5);
    149         assert(r == m.begin());
    150         r = m.find(6);
    151         assert(r == next(m.begin()));
    152         r = m.find(7);
    153         assert(r == next(m.begin(), 2));
    154         r = m.find(8);
    155         assert(r == next(m.begin(), 3));
    156         r = m.find(9);
    157         assert(r == next(m.begin(), 4));
    158         r = m.find(10);
    159         assert(r == next(m.begin(), 5));
    160         r = m.find(11);
    161         assert(r == next(m.begin(), 6));
    162         r = m.find(12);
    163         assert(r == next(m.begin(), 7));
    164         r = m.find(4);
    165         assert(r == next(m.begin(), 8));
    166     }
    167     }
    168 #endif
    169 #if TEST_STD_VER > 11
    170     {
    171     typedef std::pair<const int, double> V;
    172     typedef std::map<int, double, std::less<>> M;
    173     typedef M::iterator R;
    174 
    175     V ar[] =
    176     {
    177         V(5, 5),
    178         V(6, 6),
    179         V(7, 7),
    180         V(8, 8),
    181         V(9, 9),
    182         V(10, 10),
    183         V(11, 11),
    184         V(12, 12)
    185     };
    186     M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    187     R r = m.find(5);
    188     assert(r == m.begin());
    189     r = m.find(6);
    190     assert(r == next(m.begin()));
    191     r = m.find(7);
    192     assert(r == next(m.begin(), 2));
    193     r = m.find(8);
    194     assert(r == next(m.begin(), 3));
    195     r = m.find(9);
    196     assert(r == next(m.begin(), 4));
    197     r = m.find(10);
    198     assert(r == next(m.begin(), 5));
    199     r = m.find(11);
    200     assert(r == next(m.begin(), 6));
    201     r = m.find(12);
    202     assert(r == next(m.begin(), 7));
    203     r = m.find(4);
    204     assert(r == next(m.begin(), 8));
    205 
    206     r = m.find(C2Int(5));
    207     assert(r == m.begin());
    208     r = m.find(C2Int(6));
    209     assert(r == next(m.begin()));
    210     r = m.find(C2Int(7));
    211     assert(r == next(m.begin(), 2));
    212     r = m.find(C2Int(8));
    213     assert(r == next(m.begin(), 3));
    214     r = m.find(C2Int(9));
    215     assert(r == next(m.begin(), 4));
    216     r = m.find(C2Int(10));
    217     assert(r == next(m.begin(), 5));
    218     r = m.find(C2Int(11));
    219     assert(r == next(m.begin(), 6));
    220     r = m.find(C2Int(12));
    221     assert(r == next(m.begin(), 7));
    222     r = m.find(C2Int(4));
    223     assert(r == next(m.begin(), 8));
    224     }
    225 
    226     {
    227     typedef PrivateConstructor PC;
    228     typedef std::map<PC, double, std::less<>> M;
    229     typedef M::iterator R;
    230 
    231     M m;
    232     m [ PC::make(5)  ] = 5;
    233     m [ PC::make(6)  ] = 6;
    234     m [ PC::make(7)  ] = 7;
    235     m [ PC::make(8)  ] = 8;
    236     m [ PC::make(9)  ] = 9;
    237     m [ PC::make(10) ] = 10;
    238     m [ PC::make(11) ] = 11;
    239     m [ PC::make(12) ] = 12;
    240 
    241     R r = m.find(5);
    242     assert(r == m.begin());
    243     r = m.find(6);
    244     assert(r == next(m.begin()));
    245     r = m.find(7);
    246     assert(r == next(m.begin(), 2));
    247     r = m.find(8);
    248     assert(r == next(m.begin(), 3));
    249     r = m.find(9);
    250     assert(r == next(m.begin(), 4));
    251     r = m.find(10);
    252     assert(r == next(m.begin(), 5));
    253     r = m.find(11);
    254     assert(r == next(m.begin(), 6));
    255     r = m.find(12);
    256     assert(r == next(m.begin(), 7));
    257     r = m.find(4);
    258     assert(r == next(m.begin(), 8));
    259     }
    260 #endif
    261 }
    262