cython

Форк
0
/
cpp_stl_map.pyx 
175 строк · 5.5 Кб
1
# mode: run
2
# tag: cpp, cpp11
3

4
# cython: language_level=3
5

6
from libcpp.map cimport map
7
from libcpp.unordered_map cimport unordered_map
8
from libcpp.utility cimport pair
9

10
def test_map_insert(vals):
11
    """
12
    >>> test_map_insert([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
13
    [(-1, -1), (1, 1), (2, 2), (3, 3)]
14
    """
15
    cdef map[int,int] m = map[int, int]()
16
    cdef pair[map[int, int].iterator, bint] ret
17
    for v in vals:
18
        ret = m.insert(v)
19
    return [ (item.first, item.second) for item in m ]
20

21
def test_map_insert_it(vals):
22
    """
23
    >>> test_map_insert_it([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
24
    [(-1, -1), (1, 1), (2, 2), (3, 3)]
25
    """
26
    cdef unordered_map[int,int] um = unordered_map[int,int]()
27
    cdef map[int,int] m = map[int,int]()
28
    for k, v in vals:
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 ]
32

33
def test_const_map_insert_it(vals):
34
    """
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)]
37
    """
38
    cdef unordered_map[int,int] um = unordered_map[int,int]()
39
    cdef map[int,int] m = map[int,int]()
40
    for k, v in vals:
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 ]
44

45
def test_map_count(vals, to_find):
46
    """
47
    >>> test_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
48
    1
49
    >>> test_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
50
    1
51
    """
52
    cdef map[int,int] m = map[int,int]()
53
    for v in vals:
54
        m.insert(v)
55
    return m.count(to_find)
56

57
def test_map_erase(vals, int to_remove):
58
    """
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)]
63
    """
64
    cdef map[int,int] m = map[int,int]()
65
    cdef size_t ret
66
    for v in vals:
67
        m.insert(v)
68
    ret = m.erase(to_remove)
69
    return [ (item.first, item.second) for item in m ]
70

71
def test_map_find_erase(vals, to_remove):
72
    """
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)]
77
    """
78
    cdef map[int,int] m = map[int,int]()
79
    cdef map[int,int].iterator it
80
    for v in vals:
81
        m.insert(v)
82
    it = m.find(to_remove)
83
    it = m.erase(it)
84
    return [ (item.first, item.second) for item in m ]
85

86

87
def test_unordered_map_insert(vals):
88
    """
89
    >>> test_unordered_map_insert([(1,1),(2,2),(2,2),(3,3),(-1,-1)])
90
    [(-1, -1), (1, 1), (2, 2), (3, 3)]
91
    """
92
    cdef unordered_map[int,int] um = unordered_map[int,int]()
93
    cdef pair[unordered_map[int,int].iterator, bint] ret
94
    for v in vals:
95
        ret = um.insert(v)
96
    return sorted([ (item.first, item.second) for item in um ])
97

98
def test_unordered_map_insert_it(vals):
99
    """
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)]
102
    """
103
    cdef map[int,int] m = map[int,int]()
104
    cdef unordered_map[int,int] um = unordered_map[int,int]()
105
    for v in vals:
106
        m.insert(v)
107
    um.insert(m.begin(), m.end())
108
    return sorted([ (item.first, item.second) for item in um ])
109

110
def test_const_unordered_map_insert_it(vals):
111
    """
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)]
114
    """
115
    cdef map[int,int] m = map[int,int]()
116
    cdef unordered_map[int,int] um = unordered_map[int,int]()
117
    for v in vals:
118
        m.insert(v)
119
    um.insert(m.cbegin(), m.cend())
120
    return sorted([ (item.first, item.second) for item in um ])
121

122
def test_unordered_map_count(vals, to_find):
123
    """
124
    >>> test_unordered_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 1)
125
    1
126
    >>> test_unordered_map_count([(1,1),(2,2),(2,2),(3,3),(-1,-1)], 2)
127
    1
128
    """
129
    cdef unordered_map[int,int] um = unordered_map[int,int]()
130
    for v in vals:
131
        um.insert(v)
132
    return um.count(to_find)
133

134
def test_unordered_map_erase(vals, int to_remove):
135
    """
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)]
140
    """
141
    cdef unordered_map[int,int] um = unordered_map[int,int]()
142
    cdef size_t ret
143
    for v in vals:
144
        um.insert(v)
145
    ret = um.erase(to_remove)
146
    return sorted([ (item.first, item.second) for item in um ])
147

148
def test_unordered_map_find_erase(vals, to_remove):
149
    """
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)]
154
    """
155
    cdef unordered_map[int,int] um = unordered_map[int,int]()
156
    cdef unordered_map[int,int].iterator it
157
    for v in vals:
158
        um.insert(v)
159
    it = um.find(to_remove)
160
    it = um.erase(it)
161
    return sorted([ item for item in um ])
162

163
def test_iterator_stack_allocated():
164
    """
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()
168
    """
169
    cdef map[int,int] mymap = map[int,int]()
170
    cdef unordered_map[int,int] myumap = unordered_map[int,int]()
171
    cdef int ckey = 5
172
    it = mymap.const_find(ckey)
173
    assert it == mymap.const_end()
174
    uit = myumap.const_find(ckey)
175
    assert uit == myumap.const_end()
176

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.