4
# cython: language_level=3
6
from libcpp.map cimport map
7
from libcpp.unordered_map cimport unordered_map
8
from libcpp.utility cimport pair
10
def test_map_insert(vals):
12
>>> test_map_insert([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
13
[(-1, -1), (1, 1), (2, 2), (3, 3)]
15
cdef map[int,int] m = map[int, int]()
16
cdef pair[map[int, int].iterator, bint] ret
19
return [ (item.first, item.second) for item in m ]
21
def test_map_insert_it(vals):
23
>>> test_map_insert_it([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
24
[(-1, -1), (1, 1), (2, 2), (3, 3)]
26
cdef unordered_map[int,int] um = unordered_map[int,int]()
27
cdef map[int,int] m = map[int,int]()
29
um.insert(pair[int,int](k, v))
30
m.insert(um.begin(), um.end())
31
return [ (item.first, item.second) for item in m ]
33
def test_const_map_insert_it(vals):
35
>>> test_const_map_insert_it([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
36
[(-1, -1), (1, 1), (2, 2), (3, 3)]
38
cdef unordered_map[int,int] um = unordered_map[int,int]()
39
cdef map[int,int] m = map[int,int]()
41
um.insert(pair[int,int](k, v))
42
m.insert(um.cbegin(), um.cend())
43
return [ (item.first, item.second) for item in m ]
45
def test_map_count(vals, to_find):
47
>>> test_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
49
>>> test_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
52
cdef map[int,int] m = map[int,int]()
55
return m.count(to_find)
57
def test_map_erase(vals, int to_remove):
59
>>> test_map_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
60
[(-1, -1), (2, 2), (3, 3)]
61
>>> test_map_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
62
[(-1, -1), (1, 1), (3, 3)]
64
cdef map[int,int] m = map[int,int]()
68
ret = m.erase(to_remove)
69
return [ (item.first, item.second) for item in m ]
71
def test_map_find_erase(vals, to_remove):
73
>>> test_map_find_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
74
[(-1, -1), (2, 2), (3, 3)]
75
>>> test_map_find_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
76
[(-1, -1), (1, 1), (3, 3)]
78
cdef map[int,int] m = map[int,int]()
79
cdef map[int,int].iterator it
82
it = m.find(to_remove)
84
return [ (item.first, item.second) for item in m ]
87
def test_unordered_map_insert(vals):
89
>>> test_unordered_map_insert([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
90
[(-1, -1), (1, 1), (2, 2), (3, 3)]
92
cdef unordered_map[int,int] um = unordered_map[int,int]()
93
cdef pair[unordered_map[int,int].iterator, bint] ret
96
return sorted([ (item.first, item.second) for item in um ])
98
def test_unordered_map_insert_it(vals):
100
>>> test_unordered_map_insert_it([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
101
[(-1, -1), (1, 1), (2, 2), (3, 3)]
103
cdef map[int,int] m = map[int,int]()
104
cdef unordered_map[int,int] um = unordered_map[int,int]()
107
um.insert(m.begin(), m.end())
108
return sorted([ (item.first, item.second) for item in um ])
110
def test_const_unordered_map_insert_it(vals):
112
>>> test_const_unordered_map_insert_it([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
113
[(-1, -1), (1, 1), (2, 2), (3, 3)]
115
cdef map[int,int] m = map[int,int]()
116
cdef unordered_map[int,int] um = unordered_map[int,int]()
119
um.insert(m.cbegin(), m.cend())
120
return sorted([ (item.first, item.second) for item in um ])
122
def test_unordered_map_count(vals, to_find):
124
>>> test_unordered_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
126
>>> test_unordered_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
129
cdef unordered_map[int,int] um = unordered_map[int,int]()
132
return um.count(to_find)
134
def test_unordered_map_erase(vals, int to_remove):
136
>>> test_unordered_map_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
137
[(-1, -1), (2, 2), (3, 3)]
138
>>> test_unordered_map_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
139
[(-1, -1), (1, 1), (3, 3)]
141
cdef unordered_map[int,int] um = unordered_map[int,int]()
145
ret = um.erase(to_remove)
146
return sorted([ (item.first, item.second) for item in um ])
148
def test_unordered_map_find_erase(vals, to_remove):
150
>>> test_unordered_map_find_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
151
[(-1, -1), (2, 2), (3, 3)]
152
>>> test_unordered_map_find_erase([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
153
[(-1, -1), (1, 1), (3, 3)]
155
cdef unordered_map[int,int] um = unordered_map[int,int]()
156
cdef unordered_map[int,int].iterator it
159
it = um.find(to_remove)
161
return sorted([ item for item in um ])
163
def test_iterator_stack_allocated():
165
https://github.com/cython/cython/issues/4657 - mainly a compile test showing
166
that const iterators can be stack allocated
167
>>> test_iterator_stack_allocated()
169
cdef map[int,int] mymap = map[int,int]()
170
cdef unordered_map[int,int] myumap = unordered_map[int,int]()
172
it = mymap.const_find(ckey)
173
assert it == mymap.const_end()
174
uit = myumap.const_find(ckey)
175
assert uit == myumap.const_end()