diff options
Diffstat (limited to 'tests/run/cpp_stl_set.pyx')
-rw-r--r-- | tests/run/cpp_stl_set.pyx | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/tests/run/cpp_stl_set.pyx b/tests/run/cpp_stl_set.pyx new file mode 100644 index 000000000..1b9debc76 --- /dev/null +++ b/tests/run/cpp_stl_set.pyx @@ -0,0 +1,137 @@ +# mode: run +# tag: cpp, cpp11 + +# cython: language_level=3 + +from libcpp.set cimport set +from libcpp.unordered_set cimport unordered_set +from libcpp.utility cimport pair + +def test_set_insert(vals): + """ + >>> test_set_insert([1,2,2,3, -1]) + [-1, 1, 2, 3] + """ + cdef set[int] s = set[int]() + cdef pair[set[int].iterator, bint] ret + for v in vals: + ret = s.insert(v) + return [item for item in s] + +def test_set_insert_it(vals): + """ + >>> test_set_insert_it([1,2,2,3, -1]) + [-1, 1, 2, 3] + """ + cdef unordered_set[int] us = unordered_set[int]() + cdef set[int] s = set[int]() + for v in vals: + us.insert(v) + s.insert(us.begin(), us.end()) + return [item for item in s] + +def test_set_count(vals, to_find): + """ + >>> test_set_count([1,2,2,3, -1], 1) + 1 + >>> test_set_count([1,2,2,3, -1], 2) + 1 + """ + cdef set[int] s = set[int]() + for v in vals: + s.insert(v) + return s.count(to_find) + +def test_set_erase(vals, int to_remove): + """ + >>> test_set_erase([1,2,2,3, -1], 1) + [-1, 2, 3] + >>> test_set_erase([1,2,2,3, -1], 2) + [-1, 1, 3] + """ + cdef set[int] s = set[int]() + cdef size_t ret + for v in vals: + s.insert(v) + ret = s.erase(to_remove) + return [item for item in s] + +def test_set_find_erase(vals, to_remove): + """ + >>> test_set_find_erase([1,2,2,3, -1], 1) + [-1, 2, 3] + >>> test_set_find_erase([1,2,2,3, -1], 2) + [-1, 1, 3] + """ + cdef set[int] s = set[int]() + cdef set[int].iterator it + for v in vals: + s.insert(v) + it = s.find(to_remove) + it = s.erase(it) + return [item for item in s] + + +def test_unordered_set_insert(vals): + """ + >>> test_unordered_set_insert([1,2,2,3, -1]) + [-1, 1, 2, 3] + """ + cdef unordered_set[int] us = unordered_set[int]() + cdef pair[unordered_set[int].iterator, bint] ret + for v in vals: + ret = us.insert(v) + return sorted([item for item in us]) + +def test_unordered_set_insert_it(vals): + """ + >>> test_unordered_set_insert_it([1,2,2,3, -1]) + [-1, 1, 2, 3] + """ + cdef set[int] s = set[int]() + cdef unordered_set[int] us = unordered_set[int]() + for v in vals: + s.insert(v) + us.insert(s.begin(), s.end()) + return sorted([item for item in us]) + +def test_unordered_set_count(vals, to_find): + """ + >>> test_unordered_set_count([1,2,2,3, -1], 1) + 1 + >>> test_unordered_set_count([1,2,2,3, -1], 2) + 1 + """ + cdef unordered_set[int] us = unordered_set[int]() + for v in vals: + us.insert(v) + return us.count(to_find) + +def test_unordered_set_erase(vals, int to_remove): + """ + >>> test_unordered_set_erase([1,2,2,3, -1], 1) + [-1, 2, 3] + >>> test_unordered_set_erase([1,2,2,3, -1], 2) + [-1, 1, 3] + """ + cdef unordered_set[int] us = unordered_set[int]() + cdef size_t ret + for v in vals: + us.insert(v) + ret = us.erase(to_remove) + return sorted([item for item in us]) + +def test_unordered_set_find_erase(vals, to_remove): + """ + >>> test_unordered_set_find_erase([1,2,2,3, -1], 1) + [-1, 2, 3] + >>> test_unordered_set_find_erase([1,2,2,3, -1], 2) + [-1, 1, 3] + """ + cdef unordered_set[int] us = unordered_set[int]() + cdef unordered_set[int].iterator it + for v in vals: + us.insert(v) + it = us.find(to_remove) + it = us.erase(it) + return sorted([item for item in us]) |