2
# tag: cpp, werror, cpp11, no-cpp-locals
5
from libcpp.unordered_map cimport unordered_map
6
from libcpp.unordered_set cimport unordered_set
7
from libcpp.vector cimport vector
8
from libcpp.queue cimport queue
9
from libcpp.queue cimport priority_queue
10
from libcpp.vector cimport vector
11
from libcpp.pair cimport pair
12
from libcpp.map cimport map
13
from libcpp.set cimport set
14
from libcpp.deque cimport deque
15
from libcpp.functional cimport reference_wrapper
18
def test_reference_wrapper():
20
>>> test_reference_wrapper()
25
vector[reference_wrapper[int]] ref_wrap_vector
26
ref_wrap_vector.push_back(reference_wrapper[int](x))
27
assert ref_wrap_vector[0].get() == 1
31
def test_vector_functionality():
33
>>> test_vector_functionality()
37
vector[int] int_vector = vector[int]()
40
int_vector.push_back(77)
41
data = int_vector.data()
42
const_data = int_vector.const_data()
44
assert const_data[0] == 77
48
def test_queue_functionality():
50
>>> test_queue_functionality()
54
queue[int] int_queue = queue[int]()
55
queue[int] int_queue2 = queue[int]()
57
int_queue.swap(int_queue2)
58
assert int_queue.size() == 0
59
assert int_queue2.size() == 1
63
def test_deque_functionality():
65
>>> test_deque_functionality()
69
deque[int] int_deque = deque[int]()
70
int_deque.push_back(77)
71
int_deque.shrink_to_fit()
73
int_deque.emplace_front(66)
74
int_deque.emplace_back(88)
75
assert int_deque.front() == 66
76
assert int_deque.back() == 88
80
def test_priority_queue_functionality():
82
>>> test_priority_queue_functionality()
86
priority_queue[int] int_queue = priority_queue[int]()
87
priority_queue[int] int_queue2 = priority_queue[int]()
89
int_queue.swap(int_queue2)
90
assert int_queue.size() == 0
91
assert int_queue2.size() == 1
95
def test_set_functionality():
97
>>> test_set_functionality()
105
int_set.insert(int_set2.const_begin(), int_set2.const_end())
106
assert int_set.size() == 2
107
assert int_set.erase(int_set.const_begin(), int_set.const_end()) == int_set.end()
111
def test_map_functionality():
113
>>> test_map_functionality()
117
map[int, const void*] int_map
120
data = int_map.const_at(77)
124
def test_unordered_set_functionality():
126
>>> test_unordered_set_functionality()
130
unordered_set[int] int_set = unordered_set[int]()
131
unordered_set[int] int_set2
132
unordered_set[int].iterator iterator = int_set.begin()
134
assert int_set.size() == 1
135
int_set.erase(unordered_set[int].const_iterator(int_set.begin()), unordered_set[int].const_iterator(int_set.end()))
136
assert int_set.size() == 0
138
assert int_set.erase(1) == 1 # returns number of elements erased
139
assert int_set.size() == 0
141
iterator = int_set.find(1)
142
assert int_set.erase(iterator) == int_set.end()
146
int_set.insert(int_set2.begin(), int_set2.end())
147
assert int_set.size() == 2
149
if sys.platform != 'darwin':
150
int_set.max_load_factor(0.5)
151
assert int_set.max_load_factor() == 0.5
155
int_set.bucket_size(0)
156
int_set.bucket_count()
157
int_set.max_bucket_count()
159
assert int_set.load_factor() > 0
163
cdef extern from "cpp_unordered_map_helper.h":
164
cdef cppclass IntVectorHash:
168
def test_unordered_map_functionality():
170
>>> test_unordered_map_functionality()
174
unordered_map[int, int] int_map = unordered_map[int,int]()
175
pair[int, int] pair_insert = pair[int, int](1, 2)
176
unordered_map[int,int].iterator iterator = int_map.begin()
177
pair[unordered_map[int,int].iterator, bint] pair_iter = int_map.insert(pair_insert)
178
unordered_map[int, int] int_map2
179
unordered_map[int, int*] intptr_map
181
unordered_map[vector[int], int, IntVectorHash] int_vector_map
183
assert int_map[1] == 2
184
assert int_map.size() == 1
185
assert int_map.erase(1) == 1 # returns number of elements erased
186
assert int_map.size() == 0
188
assert int_map.size() == 1
189
assert int_map[1] == 2
190
iterator = int_map.find(1)
191
assert int_map.erase(iterator) == int_map.end()
196
int_map.insert(int_map2.begin(), int_map2.end())
197
assert int_map.size() == 2
198
assert int_map.erase(unordered_map[int,int].const_iterator(int_map.begin()), unordered_map[int,int].const_iterator(int_map.end())) == int_map.end()
200
int_map.max_load_factor(0.5)
201
assert int_map.max_load_factor() == 0.5
206
int_map.bucket_size(0)
207
int_map.bucket_count()
208
int_map.max_bucket_count()
210
assert int_map.load_factor() > 0
213
intptr = intptr_map.const_at(0)
216
int_vector_map[intvec] = 3
218
int_vector_map[intvec] = 6
219
assert int_vector_map[intvec] == 6
221
assert int_vector_map[intvec] == 3