Home | History | Annotate | Download | only in multimap.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 multimap
     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     typedef std::pair<const int, double> V;
     28     {
     29     typedef std::multimap<int, double> M;
     30     {
     31         typedef M::iterator R;
     32         V ar[] =
     33         {
     34             V(5, 1),
     35             V(5, 2),
     36             V(5, 3),
     37             V(7, 1),
     38             V(7, 2),
     39             V(7, 3),
     40             V(9, 1),
     41             V(9, 2),
     42             V(9, 3)
     43         };
     44         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     45         R r = m.find(5);
     46         assert(r == m.begin());
     47         r = m.find(6);
     48         assert(r == m.end());
     49         r = m.find(7);
     50         assert(r == next(m.begin(), 3));
     51         r = m.find(8);
     52         assert(r == m.end());
     53         r = m.find(9);
     54         assert(r == next(m.begin(), 6));
     55         r = m.find(10);
     56         assert(r == m.end());
     57     }
     58     {
     59         typedef M::const_iterator R;
     60         V ar[] =
     61         {
     62             V(5, 1),
     63             V(5, 2),
     64             V(5, 3),
     65             V(7, 1),
     66             V(7, 2),
     67             V(7, 3),
     68             V(9, 1),
     69             V(9, 2),
     70             V(9, 3)
     71         };
     72         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     73         R r = m.find(5);
     74         assert(r == m.begin());
     75         r = m.find(6);
     76         assert(r == m.end());
     77         r = m.find(7);
     78         assert(r == next(m.begin(), 3));
     79         r = m.find(8);
     80         assert(r == m.end());
     81         r = m.find(9);
     82         assert(r == next(m.begin(), 6));
     83         r = m.find(10);
     84         assert(r == m.end());
     85     }
     86     }
     87 #if TEST_STD_VER >= 11
     88     {
     89     typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
     90     {
     91         typedef M::iterator R;
     92         V ar[] =
     93         {
     94             V(5, 1),
     95             V(5, 2),
     96             V(5, 3),
     97             V(7, 1),
     98             V(7, 2),
     99             V(7, 3),
    100             V(9, 1),
    101             V(9, 2),
    102             V(9, 3)
    103         };
    104         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    105         R r = m.find(5);
    106         assert(r == m.begin());
    107         r = m.find(6);
    108         assert(r == m.end());
    109         r = m.find(7);
    110         assert(r == next(m.begin(), 3));
    111         r = m.find(8);
    112         assert(r == m.end());
    113         r = m.find(9);
    114         assert(r == next(m.begin(), 6));
    115         r = m.find(10);
    116         assert(r == m.end());
    117     }
    118     {
    119         typedef M::const_iterator R;
    120         V ar[] =
    121         {
    122             V(5, 1),
    123             V(5, 2),
    124             V(5, 3),
    125             V(7, 1),
    126             V(7, 2),
    127             V(7, 3),
    128             V(9, 1),
    129             V(9, 2),
    130             V(9, 3)
    131         };
    132         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    133         R r = m.find(5);
    134         assert(r == m.begin());
    135         r = m.find(6);
    136         assert(r == m.end());
    137         r = m.find(7);
    138         assert(r == next(m.begin(), 3));
    139         r = m.find(8);
    140         assert(r == m.end());
    141         r = m.find(9);
    142         assert(r == next(m.begin(), 6));
    143         r = m.find(10);
    144         assert(r == m.end());
    145     }
    146     }
    147 #endif
    148 #if TEST_STD_VER > 11
    149     {
    150     typedef std::pair<const int, double> V;
    151     typedef std::multimap<int, double, std::less<>> M;
    152     typedef M::iterator R;
    153 
    154         V ar[] =
    155         {
    156             V(5, 1),
    157             V(5, 2),
    158             V(5, 3),
    159             V(7, 1),
    160             V(7, 2),
    161             V(7, 3),
    162             V(9, 1),
    163             V(9, 2),
    164             V(9, 3)
    165         };
    166         M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    167         R r = m.find(5);
    168         assert(r == m.begin());
    169         r = m.find(6);
    170         assert(r == m.end());
    171         r = m.find(7);
    172         assert(r == next(m.begin(), 3));
    173         r = m.find(8);
    174         assert(r == m.end());
    175         r = m.find(9);
    176         assert(r == next(m.begin(), 6));
    177         r = m.find(10);
    178         assert(r == m.end());
    179 
    180         r = m.find(C2Int(5));
    181         assert(r == m.begin());
    182         r = m.find(C2Int(6));
    183         assert(r == m.end());
    184         r = m.find(C2Int(7));
    185         assert(r == next(m.begin(), 3));
    186         r = m.find(C2Int(8));
    187         assert(r == m.end());
    188         r = m.find(C2Int(9));
    189         assert(r == next(m.begin(), 6));
    190         r = m.find(C2Int(10));
    191         assert(r == m.end());
    192     }
    193 
    194     {
    195     typedef PrivateConstructor PC;
    196     typedef std::multimap<PC, double, std::less<>> M;
    197     typedef M::iterator R;
    198 
    199     M m;
    200     m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 ));
    201     m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 ));
    202     m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 ));
    203     m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 ));
    204     m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 ));
    205     m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 ));
    206     m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 ));
    207     m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 ));
    208     m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 ));
    209 
    210     R r = m.find(5);
    211     assert(r == m.begin());
    212     r = m.find(6);
    213     assert(r == m.end());
    214     r = m.find(7);
    215     assert(r == next(m.begin(), 3));
    216     r = m.find(8);
    217     assert(r == m.end());
    218     r = m.find(9);
    219     assert(r == next(m.begin(), 6));
    220     r = m.find(10);
    221     assert(r == m.end());
    222     }
    223 #endif
    224 }
    225