cython

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

4
# cython: language_level=3
5

6
from libcpp.set cimport multiset
7
from libcpp.unordered_set cimport unordered_multiset
8

9
def test_multiset_insert(vals):
10
    """
11
    >>> test_multiset_insert([1,2,2,3, -1])
12
    [-1, 1, 2, 2, 3]
13
    """
14
    cdef multiset[int] ms = multiset[int]()
15
    cdef multiset[int].iterator it
16
    for v in vals:
17
        it = ms.insert(v)
18
    return [ item for item in ms ]
19

20
def test_multiset_insert_it(vals):
21
    """
22
    >>> test_multiset_insert_it([1,2,2,3, -1])
23
    [-1, 1, 2, 2, 3]
24
    """
25
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
26
    cdef multiset[int] ms = multiset[int]()
27
    for v in vals:
28
        ums.insert(v)
29
    ms.insert(ums.begin(), ums.end())
30
    return [ item for item in ms ]
31

32
def test_const_multiset_insert_it(vals):
33
    """
34
    >>> test_const_multiset_insert_it([1,2,2,3, -1])
35
    [-1, 1, 2, 2, 3]
36
    """
37
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
38
    cdef multiset[int] ms = multiset[int]()
39
    for v in vals:
40
        ums.insert(v)
41
    ms.insert(ums.cbegin(), ums.cend())
42
    return [ item for item in ms ]
43

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

56
def test_multiset_erase(vals, int to_remove):
57
    """
58
    >>> test_multiset_erase([1,2,2,3, -1], 1)
59
    [-1, 2, 2, 3]
60
    >>> test_multiset_erase([1,2,2,3, -1], 2)  # removes both copies of 2
61
    [-1, 1, 3]
62
    """
63
    cdef multiset[int] ms = multiset[int]()
64
    cdef size_t ret
65
    for v in vals:
66
        ms.insert(v)
67
    ret = ms.erase(to_remove)
68
    return [ item for item in ms ]
69

70
def test_multiset_find_erase(vals, to_remove):
71
    """
72
    >>> test_multiset_find_erase([1,2,2,3, -1], 1)
73
    [-1, 2, 2, 3]
74
    >>> test_multiset_find_erase([1,2,2,3, -1], 2)  # removes a single copy of 2
75
    [-1, 1, 2, 3]
76
    """
77
    cdef multiset[int] ms = multiset[int]()
78
    cdef multiset[int].iterator it
79
    for v in vals:
80
        ms.insert(v)
81
    it = ms.find(to_remove)
82
    it = ms.erase(it)
83
    return [ item for item in ms ]
84

85

86
def test_unordered_multiset_insert(vals):
87
    """
88
    >>> test_unordered_multiset_insert([1,2,2,3, -1])
89
    [-1, 1, 2, 2, 3]
90
    """
91
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
92
    cdef unordered_multiset[int].iterator it
93
    for v in vals:
94
        it = ums.insert(v)
95
    return sorted([ item for item in ums ])
96

97
def test_unordered_multiset_insert_it(vals):
98
    """
99
    >>> test_unordered_multiset_insert_it([1,2,2,3, -1])
100
    [-1, 1, 2, 2, 3]
101
    """
102
    cdef multiset[int] ms = multiset[int]()
103
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
104
    for v in vals:
105
        ms.insert(v)
106
    ums.insert(ms.begin(), ms.end())
107
    return sorted([ item for item in ums ])
108

109
def test_const_unordered_multiset_insert_it(vals):
110
    """
111
    >>> test_const_unordered_multiset_insert_it([1,2,2,3, -1])
112
    [-1, 1, 2, 2, 3]
113
    """
114
    cdef multiset[int] ms = multiset[int]()
115
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
116
    for v in vals:
117
        ms.insert(v)
118
    ums.insert(ms.cbegin(), ms.cend())
119
    return sorted([ item for item in ums ])
120

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

133
def test_unordered_multiset_erase(vals, int to_remove):
134
    """
135
    >>> test_unordered_multiset_erase([1,2,2,3, -1], 1)
136
    [-1, 2, 2, 3]
137
    >>> test_unordered_multiset_erase([1,2,2,3, -1], 2)  # removes both copies of 2
138
    [-1, 1, 3]
139
    """
140
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
141
    cdef size_t ret
142
    for v in vals:
143
        ums.insert(v)
144
    ret = ums.erase(to_remove)
145
    return sorted([ item for item in ums ])
146

147
def test_unordered_multiset_find_erase(vals, to_remove):
148
    """
149
    >>> test_unordered_multiset_find_erase([1,2,2,3, -1], 1)
150
    [-1, 2, 2, 3]
151
    >>> test_unordered_multiset_find_erase([1,2,2,3, -1], 2)  # removes a single copy of 2
152
    [-1, 1, 2, 3]
153
    """
154
    cdef unordered_multiset[int] ums = unordered_multiset[int]()
155
    cdef unordered_multiset[int].iterator it
156
    for v in vals:
157
        ums.insert(v)
158
    it = ums.find(to_remove)
159
    it = ums.erase(it)
160
    return sorted([ item for item in ums ])
161

162

163
def test_unordered_multiset_misc():
164
    """
165
    >>> test_unordered_multiset_misc()
166
    """
167
    cdef unordered_multiset[int] ms = unordered_multiset[int]()
168
    ms.insert(1)
169
    assert ms.load_factor() > 0
170

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

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

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

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