1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// <unordered_map>
10
11// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>,
12// class Alloc = allocator<pair<const Key, T>>>
13// class unordered_map
14
15// iterator begin() {return __table_.begin();}
16// iterator end() {return __table_.end();}
17// const_iterator begin() const {return __table_.begin();}
18// const_iterator end() const {return __table_.end();}
19// const_iterator cbegin() const {return __table_.begin();}
20// const_iterator cend() const {return __table_.end();}
21
22#include <unordered_map>
23#include <string>
24#include <cassert>
25#include <cstddef>
26
27#include "test_macros.h"
28#include "min_allocator.h"
29
30int main(int, char**)
31{
32 {
33 typedef std::unordered_map<int, std::string> C;
34 typedef std::pair<int, std::string> P;
35 P a[] =
36 {
37 P(1, "one"),
38 P(2, "two"),
39 P(3, "three"),
40 P(4, "four"),
41 P(1, "four"),
42 P(2, "four"),
43 };
44 C c(a, a + sizeof(a)/sizeof(a[0]));
45 assert(c.bucket_count() >= 5);
46 assert(c.size() == 4);
47 assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
48 assert(static_cast<std::size_t>(std::distance(c.cbegin(), c.cend())) == c.size());
49 C::iterator i;
50 }
51 {
52 typedef std::unordered_map<int, std::string> C;
53 typedef std::pair<int, std::string> P;
54 P a[] =
55 {
56 P(1, "one"),
57 P(2, "two"),
58 P(3, "three"),
59 P(4, "four"),
60 P(1, "four"),
61 P(2, "four"),
62 };
63 const C c(a, a + sizeof(a)/sizeof(a[0]));
64 assert(c.bucket_count() >= 5);
65 assert(c.size() == 4);
66 assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
67 assert(static_cast<std::size_t>(std::distance(c.cbegin(), c.cend())) == c.size());
68 C::const_iterator i;
69 }
70#if TEST_STD_VER >= 11
71 {
72 typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
73 min_allocator<std::pair<const int, std::string>>> C;
74 typedef std::pair<int, std::string> P;
75 P a[] =
76 {
77 P(1, "one"),
78 P(2, "two"),
79 P(3, "three"),
80 P(4, "four"),
81 P(1, "four"),
82 P(2, "four"),
83 };
84 C c(a, a + sizeof(a)/sizeof(a[0]));
85 assert(c.bucket_count() >= 5);
86 assert(c.size() == 4);
87 assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
88 assert(static_cast<std::size_t>(std::distance(c.cbegin(), c.cend())) == c.size());
89 C::iterator i;
90 }
91 {
92 typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>,
93 min_allocator<std::pair<const int, std::string>>> C;
94 typedef std::pair<int, std::string> P;
95 P a[] =
96 {
97 P(1, "one"),
98 P(2, "two"),
99 P(3, "three"),
100 P(4, "four"),
101 P(1, "four"),
102 P(2, "four"),
103 };
104 const C c(a, a + sizeof(a)/sizeof(a[0]));
105 assert(c.bucket_count() >= 5);
106 assert(c.size() == 4);
107 assert(static_cast<std::size_t>(std::distance(c.begin(), c.end())) == c.size());
108 assert(static_cast<std::size_t>(std::distance(c.cbegin(), c.cend())) == c.size());
109 C::const_iterator i;
110 }
111#endif
112#if TEST_STD_VER > 11
113 { // N3644 testing
114 typedef std::unordered_map<int,double> C;
115 C::iterator ii1{}, ii2{};
116 C::iterator ii4 = ii1;
117 C::const_iterator cii{};
118 assert ( ii1 == ii2 );
119 assert ( ii1 == ii4 );
120
121 assert (!(ii1 != ii2 ));
122
123 assert ( (ii1 == cii ));
124 assert ( (cii == ii1 ));
125 assert (!(ii1 != cii ));
126 assert (!(cii != ii1 ));
127 }
128#endif
129
130 return 0;
131}
132

source code of libcxx/test/std/containers/unord/unord.map/iterators.pass.cpp