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