summaryrefslogtreecommitdiff
path: root/tests/run/cpp_stl_string.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/cpp_stl_string.pyx')
-rw-r--r--tests/run/cpp_stl_string.pyx66
1 files changed, 65 insertions, 1 deletions
diff --git a/tests/run/cpp_stl_string.pyx b/tests/run/cpp_stl_string.pyx
index 1f9385247..521085bfc 100644
--- a/tests/run/cpp_stl_string.pyx
+++ b/tests/run/cpp_stl_string.pyx
@@ -3,7 +3,7 @@
cimport cython
-from libcpp.string cimport string
+from libcpp.string cimport string, npos, to_string, stoi, stof
b_asdf = b'asdf'
b_asdg = b'asdg'
@@ -102,6 +102,15 @@ def test_push_back(char *a):
s.push_back(<char>ord('s'))
return s.c_str()
+def test_pop_back(char *a):
+ """
+ >>> test_pop_back(b'abc') == b'ab' or test_pop_back(b'abc')
+ True
+ """
+ cdef string s = string(a)
+ s.pop_back()
+ return s
+
def test_insert(char *a, char *b, int i):
"""
>>> test_insert('AAAA'.encode('ASCII'), 'BBBB'.encode('ASCII'), 2) == 'AABBBBAA'.encode('ASCII')
@@ -133,6 +142,17 @@ def test_find(char *a, char *b):
cdef size_t i = s.find(t)
return i
+def test_npos(char *a, char *b):
+ """
+ >>> test_npos(b'abc', b'x')
+ True
+ >>> test_npos(b'abc', b'a')
+ False
+ """
+ cdef string s = string(a)
+ cdef string st = string(b)
+ return s.find(st) == npos
+
def test_clear():
"""
>>> test_clear() == ''.encode('ASCII')
@@ -142,6 +162,18 @@ def test_clear():
s.clear()
return s.c_str()
+def test_erase(char *a, size_t pos=0, size_t count=npos):
+ """
+ >>> test_erase(b'abc') == b'' or test_erase(b'abc')
+ True
+ >>> test_erase(b'abc', 1) == b'a' or test_erase(b'abc', 1)
+ True
+ >>> test_erase(b'abc', 1, 1) == b'ac' or test_erase(b'abc', 1, 1)
+ True
+ """
+ cdef string s = string(a)
+ return s.erase(pos, count)
+
def test_assign(char *a):
"""
>>> test_assign(b_asdf) == 'ggg'.encode('ASCII')
@@ -346,6 +378,38 @@ def test_iteration(string s):
return [c for c in s]
+def test_to_string(x):
+ """
+ >>> print(test_to_string(5))
+ si=5 sl=5 ss=5 sss=5
+ >>> print(test_to_string(-5))
+ si=-5 sl=-5 ss=5 sss=-5
+ """
+ si = to_string(<int>x).decode('ascii')
+ sl = to_string(<long>x).decode('ascii')
+ ss = to_string(<size_t>abs(x)).decode('ascii')
+ sss = to_string(<ssize_t>x).decode('ascii')
+ return f"si={si} sl={sl} ss={ss} sss={sss}"
+
+
+def test_stoi(char *a):
+ """
+ >>> test_stoi(b'5')
+ 5
+ """
+ cdef string s = string(a)
+ return stoi(s)
+
+
+def test_stof(char *a):
+ """
+ >>> test_stof(b'5.5')
+ 5.5
+ """
+ cdef string s = string(a)
+ return stof(s)
+
+
_WARNINGS = """
21:31: Cannot pass Python object as C++ data structure reference (string &), will pass by copy.
"""