1# mode: run 2# tag: cpp, cpp11 3 4# cython: language_level=3 5 6from libcpp.set cimport set 7from libcpp.unordered_set cimport unordered_set 8from libcpp.utility cimport pair 9 10def test_set_insert(vals): 11 """ 12 >>> test_set_insert([1,2,2,3, -1]) 13 [-1, 1, 2, 3] 14 """ 15 cdef set[int] s = set[int]() 16 cdef pair[set[int].iterator, bint] ret 17 for v in vals: 18 ret = s.insert(v) 19 return [item for item in s] 20 21def test_set_insert_it(vals): 22 """ 23 >>> test_set_insert_it([1,2,2,3, -1]) 24 [-1, 1, 2, 3] 25 """ 26 cdef unordered_set[int] us = unordered_set[int]() 27 cdef set[int] s = set[int]() 28 for v in vals: 29 us.insert(v) 30 s.insert(us.begin(), us.end()) 31 return [item for item in s] 32 33def test_set_count(vals, to_find): 34 """ 35 >>> test_set_count([1,2,2,3, -1], 1) 36 1 37 >>> test_set_count([1,2,2,3, -1], 2) 38 1 39 """ 40 cdef set[int] s = set[int]() 41 for v in vals: 42 s.insert(v) 43 return s.count(to_find) 44 45def test_set_erase(vals, int to_remove): 46 """ 47 >>> test_set_erase([1,2,2,3, -1], 1) 48 [-1, 2, 3] 49 >>> test_set_erase([1,2,2,3, -1], 2) 50 [-1, 1, 3] 51 """ 52 cdef set[int] s = set[int]() 53 cdef size_t ret 54 for v in vals: 55 s.insert(v) 56 ret = s.erase(to_remove) 57 return [item for item in s] 58 59def test_set_find_erase(vals, to_remove): 60 """ 61 >>> test_set_find_erase([1,2,2,3, -1], 1) 62 [-1, 2, 3] 63 >>> test_set_find_erase([1,2,2,3, -1], 2) 64 [-1, 1, 3] 65 """ 66 cdef set[int] s = set[int]() 67 cdef set[int].iterator it 68 for v in vals: 69 s.insert(v) 70 it = s.find(to_remove) 71 it = s.erase(it) 72 return [item for item in s] 73 74 75def test_unordered_set_insert(vals): 76 """ 77 >>> test_unordered_set_insert([1,2,2,3, -1]) 78 [-1, 1, 2, 3] 79 """ 80 cdef unordered_set[int] us = unordered_set[int]() 81 cdef pair[unordered_set[int].iterator, bint] ret 82 for v in vals: 83 ret = us.insert(v) 84 return sorted([item for item in us]) 85 86def test_unordered_set_insert_it(vals): 87 """ 88 >>> test_unordered_set_insert_it([1,2,2,3, -1]) 89 [-1, 1, 2, 3] 90 """ 91 cdef set[int] s = set[int]() 92 cdef unordered_set[int] us = unordered_set[int]() 93 for v in vals: 94 s.insert(v) 95 us.insert(s.begin(), s.end()) 96 return sorted([item for item in us]) 97 98def test_unordered_set_count(vals, to_find): 99 """ 100 >>> test_unordered_set_count([1,2,2,3, -1], 1) 101 1 102 >>> test_unordered_set_count([1,2,2,3, -1], 2) 103 1 104 """ 105 cdef unordered_set[int] us = unordered_set[int]() 106 for v in vals: 107 us.insert(v) 108 return us.count(to_find) 109 110def test_unordered_set_erase(vals, int to_remove): 111 """ 112 >>> test_unordered_set_erase([1,2,2,3, -1], 1) 113 [-1, 2, 3] 114 >>> test_unordered_set_erase([1,2,2,3, -1], 2) 115 [-1, 1, 3] 116 """ 117 cdef unordered_set[int] us = unordered_set[int]() 118 cdef size_t ret 119 for v in vals: 120 us.insert(v) 121 ret = us.erase(to_remove) 122 return sorted([item for item in us]) 123 124def test_unordered_set_find_erase(vals, to_remove): 125 """ 126 >>> test_unordered_set_find_erase([1,2,2,3, -1], 1) 127 [-1, 2, 3] 128 >>> test_unordered_set_find_erase([1,2,2,3, -1], 2) 129 [-1, 1, 3] 130 """ 131 cdef unordered_set[int] us = unordered_set[int]() 132 cdef unordered_set[int].iterator it 133 for v in vals: 134 us.insert(v) 135 it = us.find(to_remove) 136 it = us.erase(it) 137 return sorted([item for item in us]) 138