1b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
2b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
3b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//                     The LLVM Compiler Infrastructure
4b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
5b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// This file is dual licensed under the MIT and the University of Illinois Open
6b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// Source Licenses. See LICENSE.TXT for details.
7b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//
8b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//===----------------------------------------------------------------------===//
9b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
10b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// <unordered_set>
11b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
12b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>,
13b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner//           class Alloc = allocator<Value>>
14b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// class unordered_set
15b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
16b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// local_iterator       begin (size_type n);
17b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// local_iterator       end   (size_type n);
18b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// const_local_iterator begin (size_type n) const;
19b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// const_local_iterator end   (size_type n) const;
20b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// const_local_iterator cbegin(size_type n) const;
21b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner// const_local_iterator cend  (size_type n) const;
22b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
23b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <unordered_set>
24b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner#include <cassert>
25b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
265de42e6621b3d0131472c3f8838b7f0ccf3e8963Andrew Hsieh#include "min_allocator.h"
27ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
28b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turnerint main()
29b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner{
30b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
31b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::unordered_set<int> C;
32b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef int P;
33b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef C::local_iterator I;
34b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        P a[] =
35b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
36b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
37b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2),
38b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(3),
39b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(4),
40b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
41b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2)
42b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        };
43b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C c(a, a + sizeof(a)/sizeof(a[0]));
44b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(c.bucket_count() >= 5);
45b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::size_type b = c.bucket(0);
46b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I i = c.begin(b);
47b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I j = c.end(b);
48b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 0);
49b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
50b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(1);
51b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
52b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
53b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
54b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 1);
55b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
56b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(2);
57b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
58b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
59b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
60b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 2);
61b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
62b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(3);
63b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
64b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
65b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
66b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 3);
67b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
68b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(4);
69b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
70b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
71b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
72b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 4);
73b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
74b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
75b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::unordered_set<int> C;
76b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef int P;
77b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef C::const_local_iterator I;
78b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        P a[] =
79b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
80b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
81b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2),
82b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(3),
83b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(4),
84b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
85b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2)
86b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        };
87b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        const C c(a, a + sizeof(a)/sizeof(a[0]));
88b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(c.bucket_count() >= 5);
89b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::size_type b = c.bucket(0);
90b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I i = c.begin(b);
91b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I j = c.end(b);
92b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 0);
93b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
94b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(1);
95b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
96b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
97b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
98b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 1);
99b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
100b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(2);
101b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
102b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
103b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
104b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 2);
105b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
106b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(3);
107b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
108b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
109b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
110b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 3);
111b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
112b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(4);
113b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.begin(b);
114b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.end(b);
115b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
116b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 4);
117b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
118b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
119b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::unordered_set<int> C;
120b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef int P;
121b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef C::const_local_iterator I;
122b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        P a[] =
123b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
124b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
125b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2),
126b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(3),
127b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(4),
128b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
129b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2)
130b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        };
131b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C c(a, a + sizeof(a)/sizeof(a[0]));
132b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(c.bucket_count() >= 5);
133b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::size_type b = c.bucket(0);
134b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I i = c.cbegin(b);
135b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I j = c.cend(b);
136b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 0);
137b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
138b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(1);
139b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
140b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
141b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
142b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 1);
143b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
144b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(2);
145b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
146b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
147b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
148b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 2);
149b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
150b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(3);
151b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
152b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
153b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
154b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 3);
155b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
156b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(4);
157b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
158b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
159b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
160b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 4);
161b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
162b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    {
163b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef std::unordered_set<int> C;
164b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef int P;
165b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        typedef C::const_local_iterator I;
166b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        P a[] =
167b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        {
168b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
169b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2),
170b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(3),
171b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(4),
172b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(1),
173b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner            P(2)
174b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        };
175b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        const C c(a, a + sizeof(a)/sizeof(a[0]));
176b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(c.bucket_count() >= 5);
177b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        C::size_type b = c.bucket(0);
178b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I i = c.cbegin(b);
179b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        I j = c.cend(b);
180b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 0);
181b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
182b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(1);
183b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
184b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
185b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
186b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 1);
187b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
188b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(2);
189b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
190b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
191b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
192b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 2);
193b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
194b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(3);
195b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
196b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
197b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
198b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 3);
199b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner
200b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        b = c.bucket(4);
201b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        i = c.cbegin(b);
202b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        j = c.cend(b);
203b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(std::distance(i, j) == 1);
204b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner        assert(*i == 4);
205b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner    }
206ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#if __cplusplus >= 201103L
207ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
208ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::unordered_set<int, std::hash<int>,
209ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner                                      std::equal_to<int>, min_allocator<int>> C;
210ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef int P;
211ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef C::local_iterator I;
212ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        P a[] =
213ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        {
214ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
215ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2),
216ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(3),
217ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(4),
218ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
219ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2)
220ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        };
221ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C c(a, a + sizeof(a)/sizeof(a[0]));
222ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(c.bucket_count() >= 5);
223ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::size_type b = c.bucket(0);
224ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I i = c.begin(b);
225ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I j = c.end(b);
226ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 0);
227ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
228ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(1);
229ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
230ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
231ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
232ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 1);
233ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
234ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(2);
235ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
236ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
237ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
238ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 2);
239ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
240ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(3);
241ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
242ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
243ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
244ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 3);
245ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
246ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(4);
247ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
248ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
249ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
250ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 4);
251ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
252ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
253ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::unordered_set<int, std::hash<int>,
254ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner                                      std::equal_to<int>, min_allocator<int>> C;
255ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef int P;
256ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef C::const_local_iterator I;
257ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        P a[] =
258ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        {
259ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
260ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2),
261ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(3),
262ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(4),
263ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
264ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2)
265ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        };
266ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        const C c(a, a + sizeof(a)/sizeof(a[0]));
267ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(c.bucket_count() >= 5);
268ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::size_type b = c.bucket(0);
269ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I i = c.begin(b);
270ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I j = c.end(b);
271ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 0);
272ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
273ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(1);
274ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
275ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
276ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
277ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 1);
278ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
279ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(2);
280ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
281ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
282ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
283ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 2);
284ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
285ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(3);
286ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
287ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
288ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
289ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 3);
290ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
291ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(4);
292ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.begin(b);
293ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.end(b);
294ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
295ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 4);
296ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
297ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
298ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::unordered_set<int, std::hash<int>,
299ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner                                      std::equal_to<int>, min_allocator<int>> C;
300ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef int P;
301ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef C::const_local_iterator I;
302ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        P a[] =
303ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        {
304ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
305ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2),
306ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(3),
307ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(4),
308ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
309ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2)
310ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        };
311ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C c(a, a + sizeof(a)/sizeof(a[0]));
312ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(c.bucket_count() >= 5);
313ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::size_type b = c.bucket(0);
314ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I i = c.cbegin(b);
315ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I j = c.cend(b);
316ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 0);
317ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
318ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(1);
319ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
320ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
321ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
322ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 1);
323ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
324ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(2);
325ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
326ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
327ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
328ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 2);
329ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
330ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(3);
331ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
332ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
333ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
334ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 3);
335ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
336ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(4);
337ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
338ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
339ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
340ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 4);
341ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
342ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    {
343ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef std::unordered_set<int, std::hash<int>,
344ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner                                      std::equal_to<int>, min_allocator<int>> C;
345ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef int P;
346ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        typedef C::const_local_iterator I;
347ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        P a[] =
348ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        {
349ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
350ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2),
351ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(3),
352ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(4),
353ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(1),
354ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner            P(2)
355ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        };
356ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        const C c(a, a + sizeof(a)/sizeof(a[0]));
357ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(c.bucket_count() >= 5);
358ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        C::size_type b = c.bucket(0);
359ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I i = c.cbegin(b);
360ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        I j = c.cend(b);
361ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 0);
362ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
363ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(1);
364ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
365ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
366ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
367ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 1);
368ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
369ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(2);
370ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
371ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
372ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
373ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 2);
374ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
375ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(3);
376ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
377ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
378ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
379ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 3);
380ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner
381ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        b = c.bucket(4);
382ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        i = c.cbegin(b);
383ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        j = c.cend(b);
384ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(std::distance(i, j) == 1);
385ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner        assert(*i == 4);
386ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner    }
387ad46d2248426e810edc5878c7cb086b7093f3cf5David 'Digit' Turner#endif
388b9a36c36f4b257de79bd656aefa7bfde40cedb0fDavid 'Digit' Turner}
389