xref: /llvm-project/libcxx/test/std/containers/associative/multimap/multimap.ops/count.pass.cpp (revision cc89063bff0f73ec7049a1dcb5d4688ae6806941)
15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier 
95a83710eSEric Fiselier // <map>
105a83710eSEric Fiselier 
115a83710eSEric Fiselier // class multimap
125a83710eSEric Fiselier 
135a83710eSEric Fiselier // size_type count(const key_type& k) const;
145a83710eSEric Fiselier 
155a83710eSEric Fiselier #include <map>
165a83710eSEric Fiselier #include <cassert>
175a83710eSEric Fiselier 
180f901c7eSStephan T. Lavavej #include "test_macros.h"
195a83710eSEric Fiselier #include "min_allocator.h"
20*cc89063bSNico Weber #include "private_constructor.h"
21f8457a07SMarshall Clow #include "is_transparent.h"
225a83710eSEric Fiselier 
main(int,char **)232df59c50SJF Bastien int main(int, char**)
245a83710eSEric Fiselier {
255a83710eSEric Fiselier     typedef std::pair<const int, double> V;
265a83710eSEric Fiselier     {
275a83710eSEric Fiselier     typedef std::multimap<int, double> M;
285a83710eSEric Fiselier     {
295a83710eSEric Fiselier         typedef M::size_type R;
305a83710eSEric Fiselier         V ar[] =
315a83710eSEric Fiselier         {
325a83710eSEric Fiselier             V(5, 1),
335a83710eSEric Fiselier             V(5, 2),
345a83710eSEric Fiselier             V(5, 3),
355a83710eSEric Fiselier             V(7, 1),
365a83710eSEric Fiselier             V(7, 2),
375a83710eSEric Fiselier             V(7, 3),
385a83710eSEric Fiselier             V(9, 1),
395a83710eSEric Fiselier             V(9, 2),
405a83710eSEric Fiselier             V(9, 3)
415a83710eSEric Fiselier         };
425a83710eSEric Fiselier         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
435a83710eSEric Fiselier         R r = m.count(4);
445a83710eSEric Fiselier         assert(r == 0);
455a83710eSEric Fiselier         r = m.count(5);
465a83710eSEric Fiselier         assert(r == 3);
475a83710eSEric Fiselier         r = m.count(6);
485a83710eSEric Fiselier         assert(r == 0);
495a83710eSEric Fiselier         r = m.count(7);
505a83710eSEric Fiselier         assert(r == 3);
515a83710eSEric Fiselier         r = m.count(8);
525a83710eSEric Fiselier         assert(r == 0);
535a83710eSEric Fiselier         r = m.count(9);
545a83710eSEric Fiselier         assert(r == 3);
555a83710eSEric Fiselier         r = m.count(10);
565a83710eSEric Fiselier         assert(r == 0);
575a83710eSEric Fiselier     }
585a83710eSEric Fiselier     }
59f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
605a83710eSEric Fiselier     {
615a83710eSEric Fiselier     typedef std::multimap<int, double, std::less<int>, min_allocator<std::pair<const int, double>>> M;
625a83710eSEric Fiselier     {
635a83710eSEric Fiselier         typedef M::size_type R;
645a83710eSEric Fiselier         V ar[] =
655a83710eSEric Fiselier         {
665a83710eSEric Fiselier             V(5, 1),
675a83710eSEric Fiselier             V(5, 2),
685a83710eSEric Fiselier             V(5, 3),
695a83710eSEric Fiselier             V(7, 1),
705a83710eSEric Fiselier             V(7, 2),
715a83710eSEric Fiselier             V(7, 3),
725a83710eSEric Fiselier             V(9, 1),
735a83710eSEric Fiselier             V(9, 2),
745a83710eSEric Fiselier             V(9, 3)
755a83710eSEric Fiselier         };
765a83710eSEric Fiselier         const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
775a83710eSEric Fiselier         R r = m.count(4);
785a83710eSEric Fiselier         assert(r == 0);
795a83710eSEric Fiselier         r = m.count(5);
805a83710eSEric Fiselier         assert(r == 3);
815a83710eSEric Fiselier         r = m.count(6);
825a83710eSEric Fiselier         assert(r == 0);
835a83710eSEric Fiselier         r = m.count(7);
845a83710eSEric Fiselier         assert(r == 3);
855a83710eSEric Fiselier         r = m.count(8);
865a83710eSEric Fiselier         assert(r == 0);
875a83710eSEric Fiselier         r = m.count(9);
885a83710eSEric Fiselier         assert(r == 3);
895a83710eSEric Fiselier         r = m.count(10);
905a83710eSEric Fiselier         assert(r == 0);
915a83710eSEric Fiselier     }
925a83710eSEric Fiselier     }
935a83710eSEric Fiselier #endif
945a83710eSEric Fiselier 
950f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
965a83710eSEric Fiselier     {
975a83710eSEric Fiselier     typedef std::multimap<int, double, std::less<>> M;
985a83710eSEric Fiselier     typedef M::size_type R;
995a83710eSEric Fiselier     V ar[] =
1005a83710eSEric Fiselier     {
1015a83710eSEric Fiselier         V(5, 1),
1025a83710eSEric Fiselier         V(5, 2),
1035a83710eSEric Fiselier         V(5, 3),
1045a83710eSEric Fiselier         V(7, 1),
1055a83710eSEric Fiselier         V(7, 2),
1065a83710eSEric Fiselier         V(7, 3),
1075a83710eSEric Fiselier         V(9, 1),
1085a83710eSEric Fiselier         V(9, 2),
1095a83710eSEric Fiselier         V(9, 3)
1105a83710eSEric Fiselier     };
1115a83710eSEric Fiselier     const M m(ar, ar+sizeof(ar)/sizeof(ar[0]));
1125a83710eSEric Fiselier     R r = m.count(4);
1135a83710eSEric Fiselier     assert(r == 0);
1145a83710eSEric Fiselier     r = m.count(5);
1155a83710eSEric Fiselier     assert(r == 3);
1165a83710eSEric Fiselier     r = m.count(6);
1175a83710eSEric Fiselier     assert(r == 0);
1185a83710eSEric Fiselier     r = m.count(7);
1195a83710eSEric Fiselier     assert(r == 3);
1205a83710eSEric Fiselier     r = m.count(8);
1215a83710eSEric Fiselier     assert(r == 0);
1225a83710eSEric Fiselier     r = m.count(9);
1235a83710eSEric Fiselier     assert(r == 3);
1245a83710eSEric Fiselier     r = m.count(10);
1255a83710eSEric Fiselier     assert(r == 0);
126f8457a07SMarshall Clow 
127f8457a07SMarshall Clow     r = m.count(C2Int(4));
128f8457a07SMarshall Clow     assert(r == 0);
129f8457a07SMarshall Clow     r = m.count(C2Int(5));
130f8457a07SMarshall Clow     assert(r == 3);
131f8457a07SMarshall Clow     r = m.count(C2Int(6));
132f8457a07SMarshall Clow     assert(r == 0);
133f8457a07SMarshall Clow     r = m.count(C2Int(7));
134f8457a07SMarshall Clow     assert(r == 3);
135f8457a07SMarshall Clow     r = m.count(C2Int(8));
136f8457a07SMarshall Clow     assert(r == 0);
137f8457a07SMarshall Clow     r = m.count(C2Int(9));
138f8457a07SMarshall Clow     assert(r == 3);
139f8457a07SMarshall Clow     r = m.count(C2Int(10));
140f8457a07SMarshall Clow     assert(r == 0);
1415a83710eSEric Fiselier     }
1425a83710eSEric Fiselier 
1435a83710eSEric Fiselier     {
1445a83710eSEric Fiselier     typedef PrivateConstructor PC;
1455a83710eSEric Fiselier     typedef std::multimap<PC, double, std::less<>> M;
1465a83710eSEric Fiselier     typedef M::size_type R;
1475a83710eSEric Fiselier 
1485a83710eSEric Fiselier     M m;
1495a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(5), 1 ));
1505a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(5), 2 ));
1515a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(5), 3 ));
1525a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(7), 1 ));
1535a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(7), 2 ));
1545a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(7), 3 ));
1555a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(9), 1 ));
1565a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(9), 2 ));
1575a83710eSEric Fiselier     m.insert ( std::make_pair<PC, double> ( PC::make(9), 3 ));
1585a83710eSEric Fiselier 
1595a83710eSEric Fiselier     R r = m.count(4);
1605a83710eSEric Fiselier     assert(r == 0);
1615a83710eSEric Fiselier     r = m.count(5);
1625a83710eSEric Fiselier     assert(r == 3);
1635a83710eSEric Fiselier     r = m.count(6);
1645a83710eSEric Fiselier     assert(r == 0);
1655a83710eSEric Fiselier     r = m.count(7);
1665a83710eSEric Fiselier     assert(r == 3);
1675a83710eSEric Fiselier     r = m.count(8);
1685a83710eSEric Fiselier     assert(r == 0);
1695a83710eSEric Fiselier     r = m.count(9);
1705a83710eSEric Fiselier     assert(r == 3);
1715a83710eSEric Fiselier     r = m.count(10);
1725a83710eSEric Fiselier     assert(r == 0);
1735a83710eSEric Fiselier     }
1745a83710eSEric Fiselier #endif
1752df59c50SJF Bastien 
1762df59c50SJF Bastien   return 0;
1775a83710eSEric Fiselier }
178