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 // size_type count(const key_type& k) const;
     15 
     16 #include <map>
     17 #include <cassert>
     18 
     19 #include "min_allocator.h"
     20 #include "private_constructor.hpp"
     21 #include "is_transparent.h"
     22 
     23 int main()
     24 {
     25     typedef std::pair<const int, double> V;
     26     {
     27     typedef std::multimap<int, double> M;
     28     {
     29         typedef M::size_type R;
     30         V ar[] =
     31         {
     32             V(5, 1),
     33             V(5, 2),
     34             V(5, 3),
     35             V(7, 1),
     36             V(7, 2),
     37             V(7, 3),
     38             V(9, 1),
     39             V(9, 2),
     40             V(9, 3)
     41         };
     42         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     43         R r = m.count(4);
     44         assert(r == 0);
     45         r = m.count(5);
     46         assert(r == 3);
     47         r = m.count(6);
     48         assert(r == 0);
     49         r = m.count(7);
     50         assert(r == 3);
     51         r = m.count(8);
     52         assert(r == 0);
     53         r = m.count(9);
     54         assert(r == 3);
     55         r = m.count(10);
     56         assert(r == 0);
     57     }
     58     }
     59 #if __cplusplus >= 201103L
     60     {
     61     typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
     62     {
     63         typedef M::size_type R;
     64         V ar[] =
     65         {
     66             V(5, 1),
     67             V(5, 2),
     68             V(5, 3),
     69             V(7, 1),
     70             V(7, 2),
     71             V(7, 3),
     72             V(9, 1),
     73             V(9, 2),
     74             V(9, 3)
     75         };
     76         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
     77         R r = m.count(4);
     78         assert(r == 0);
     79         r = m.count(5);
     80         assert(r == 3);
     81         r = m.count(6);
     82         assert(r == 0);
     83         r = m.count(7);
     84         assert(r == 3);
     85         r = m.count(8);
     86         assert(r == 0);
     87         r = m.count(9);
     88         assert(r == 3);
     89         r = m.count(10);
     90         assert(r == 0);
     91     }
     92     }
     93 #endif
     94 
     95 #if _LIBCPP_STD_VER > 11
     96     {
     97     typedef std::multimap<int, double, std::less<>> M;
     98     typedef M::size_type R;
     99     V ar[] =
    100     {
    101         V(5, 1),
    102         V(5, 2),
    103         V(5, 3),
    104         V(7, 1),
    105         V(7, 2),
    106         V(7, 3),
    107         V(9, 1),
    108         V(9, 2),
    109         V(9, 3)
    110     };
    111     const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
    112     R r = m.count(4);
    113     assert(r == 0);
    114     r = m.count(5);
    115     assert(r == 3);
    116     r = m.count(6);
    117     assert(r == 0);
    118     r = m.count(7);
    119     assert(r == 3);
    120     r = m.count(8);
    121     assert(r == 0);
    122     r = m.count(9);
    123     assert(r == 3);
    124     r = m.count(10);
    125     assert(r == 0);
    126 
    127     r = m.count(C2Int(4));
    128     assert(r == 0);
    129     r = m.count(C2Int(5));
    130     assert(r == 3);
    131     r = m.count(C2Int(6));
    132     assert(r == 0);
    133     r = m.count(C2Int(7));
    134     assert(r == 3);
    135     r = m.count(C2Int(8));
    136     assert(r == 0);
    137     r = m.count(C2Int(9));
    138     assert(r == 3);
    139     r = m.count(C2Int(10));
    140     assert(r == 0);
    141     }
    142 
    143     {
    144     typedef PrivateConstructor PC;
    145     typedef std::multimap<PC, double, std::less<>> M;
    146     typedef M::size_type R;
    147 
    148     M m;
    149     m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 ));
    150     m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 ));
    151     m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 ));
    152     m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 ));
    153     m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 ));
    154     m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 ));
    155     m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 ));
    156     m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 ));
    157     m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 ));
    158 
    159     R r = m.count(4);
    160     assert(r == 0);
    161     r = m.count(5);
    162     assert(r == 3);
    163     r = m.count(6);
    164     assert(r == 0);
    165     r = m.count(7);
    166     assert(r == 3);
    167     r = m.count(8);
    168     assert(r == 0);
    169     r = m.count(9);
    170     assert(r == 3);
    171     r = m.count(10);
    172     assert(r == 0);
    173     }
    174 #endif
    175 }
    176